Developing Hive locally requires you to have the following software installed locally:
- Node.js 18 (or
nvm
orfnm
) - pnpm v8
- Docker
- Clone the repository locally
- Make sure to install the recommended VSCode extensions (defined in
.vscode/extensions.json
) - In the root of the repo, run
nvm use
to use the same version of node as mentioned - Create
.env
file in the root, and use the following:
ENVIRONMENT=local
- Run
pnpm i
at the root to install all the dependencies and run the hooks - Run
pnpm local:setup
to run Docker compose dependencies, create databases and migrate database - Run
pnpm generate
to generate the typings from the graphql files (usepnpm graphql:generate
if you only need to run GraphQL Codegen) - Run
pnpm build
to build all services - Click on
Start Hive
in the bottom bar of VSCode - Open the UI (
http://localhost:3000
by default) and Sign in with any of the identity provider - Once this is done, you should be able to log in and use the project
- Once you generate the token against your organization/personal account in hive, the same can be
added locally to
hive.json
withinpackages/libraries/cli
which can be used to interact via the hive cli with the registry (Usehttp://localhost:3001/graphql
as theregistry.endpoint
value inhive.json
) - Now you can use Hive locally. All other steps in this document are optional and only necessary if you work on specific features.
We have a script to feed your local instance of Hive with initial seed data. This step is optional.
- Use
Start Hive
to run your local Hive instance - Make sure
usage
andusage-ingestor
are running as well (withpnpm dev
) - Open Hive app, create a project and a target, then create a token
- Run the seed script:
TOKEN="MY_TOKEN_HERE" pnpm seed
- This should report a dummy schema and some dummy usage data to your local instance of Hive, allowing you to test features e2e
Note: You can set
STAGING=1
in order to target staging env and seed a target there. Same for development env, you can useDEV=1
Note: You can set
FEDERATION=1
in order to publish multiple subgraphs.
To send more operations and test heavy load on Hive instance, you can also set
OPERATIONS
(amount of operations in each interval round, default is1
) andINTERVAL
(frequency of sending operations, default:1000
ms). For example, usingINTERVAL=1000 OPERATIONS=1000
will send 1000 requests per second.
We recommend the following flow if you are having issues with running Hive locally:
- Stop all Docker containers:
docker kill $(docker ps -q)
- Clear all local Docker environment:
docker system prune --all --force --volumes
- Delete all generated local
.env
files:find . -name '.env' | xargs rm
- Delete local
docker/.hive
anddocker/.hive-dev
dir used by Docker volumes. - Reinstall dependencies using
pnpm install
- Force-generate new
.env
files:pnpm env:sync --force
-
Start Hive locally
-
Create a project and a target
-
Create a token from that target
-
Go to
packages/libraries/cli
and runpnpm build
-
Inside
packages/libraries/cli
, run:pnpm start schema:publish --registry.accessToken "YOUR_TOKEN_HERE" --registry.endpoint "http://localhost:3001/graphql" examples/single.graphql
The registry endpoint is the GraphQL endpoint of your local
server
service. You can also edit thehive.json
file in thecli
package to avoid passing theaccessToken
andendpoint
every time.
- Download Loophole CLI (same as ngrok but supports non-random urls)
- Log in to Loophole
$ loophole account login
- Start the proxy by running
$ loophole http 3000 --hostname hive-<your-name>
(@kamilkisiela I usehive-kamil
). It createshttps://hive-<your-name>.loophole.site
endpoint. - Message @kamilkisiela and send him the url (He will update the list of accepted redirect urls in both Auth0 and Slack App).
- Update
APP_BASE_URL
andAUTH0_BASE_URL
inpackages/web/app/.env
to the proxy URL (e.g.https://hive-<your-name>.loophole.site
) - Run
packages/web/app
and openhttps://hive-<your-name>.loophole.site
.
We have a special Slack channel called
#hive-tests
to not spam people :)
- Follow first two steps from
Setting up Slack App for developing
(download loophole and log in). - Start web app proxy:
$ loophole http 3000 --hostname hive-<your-name>
- Start server proxy:
$ loophole http 3001 --hostname hive-<your-name>
- Go to
Settings
->Developer settings
->GitHub Apps
, and click on theNew GitHub App
button. - Provide a name for your app, and set the
Homepage URL
tohttps://hive-<your-name>.loophole.site
. Then set the callback URL tohttps://hive-<your-name>.loophole.site/api/github/callback
, and post installation's callback URL tohttps://hive-<your-name>.loophole.site/api/github/setup-callback
. - Click on
Create GitHub App
.
-
Server: Set the following env variables in
packages/services/server/.env
:INTEGRATION_GITHUB=1 INTEGRATION_GITHUB_GITHUB_APP_ID=<your-github-app-id> INTEGRATION_GITHUB_GITHUB_APP_PRIVATE_KEY=<your-github-app-private-key>
You'll find the GitHub App ID and private key in the
General
tab of your GitHub App. -
Web App: Set the following in
packages/web/app/.env
:INTEGRATION_GITHUB_APP_NAME=<your-github-app-name>
Open Hive UI and go to your organization's settings page. Find Integrations
section and click on
Connect GitHub
. You should be redirected to GitHub where you can grant repository access. After
installing the app, you should be redirected back to Hive.
- Create a project and a target.
- Create a token from that target.
- Setup a GitHub repo with CI/CD actions like this one: https://github.com/n1ru4l/hive-federation-subgraph/.
- Add the token to the repo's secrets as
HIVE_TOKEN
. - Add Hive endpoint to the repo's secrets as
HIVE_ENDPOINT
(https://hive-<your-name>.loophole.site/graphql
). - Make sure your GitHub app is installed on that repo.
- Push a commit to the repo and check if the CI/CD action is triggered.
The docker-compose.dev.yml
files includes a mock OIDC server that can be used for testing the OIDC
login/logout flow locally. The server tuns on port 7043
.
Please make sure to set the AUTH_ORGANIZATION_OIDC
environment variables for the server
and
app
to "1"
.
You can use the following values for connecting an integration to an OIDC provider.
# Token Endpoint
http://localhost:7043/connect/token
# User Info Endpoint
http://localhost:7043/connect/userinfo
# Authorization Endpoint
http://localhost:7043/connect/authorize
# Client ID
implicit-mock-client
# Client Secret
client-credentials-mock-client-secret
For login use the following credentials.
# Username
test-user
# Password
password
- Click on Start Hive in the bottom bar of VSCode
- Open the UI (
http://localhost:3000
by default) and register any email and password - Sending e-mails is mocked out during local development, so in order to verify the account find
the verification link by visiting the email server's
/_history
endpoint -http://localhost:6260/_history
by default.- Searching for
token
should help you find the link.
- Searching for
Note: If you are not working at The Guild or on the legacy Auth0 sign-up feature, you can safely ignore this section.
Since we migrated from Auth0 to SuperTokens there is a compatibility layer for importing/migrating accounts from Auth0 to SuperTokens.
By default, you don't need to set this up and can just use SuperTokens locally. However, if you need to test some stuff or fix the Auth0 -> SuperTokens migration flow you have to set up some stuff.
- Create your own Auth0 application
- If you haven't already, create an account on manage.auth0.com
- Create a new application with the following settings:
- Type:
Regular Web Application
- Allowed Callback URLs:
http://localhost:3000/api/callback
- Allowed Logout URLs:
http://localhost:3000/
- Type:
- Create two Auth0 users
- This can be done from the "User Management" page
- Create a new "Rule" in your Auth0 Account
- This can be done from the "Auth Pipeline -> Rules" section on the left navigation bar.
- Enter the following code:
function (user, context, callback) { const namespace = 'https://graphql-hive.com'; context.accessToken[namespace + '/metadata'] = user.user_metadata; context.idToken[namespace + '/metadata'] = user.user_metadata; context.accessToken[namespace + '/userinfo'] = { user_id: user.user_id, email: user.email, username: user.username, nickname: user.nickname }; return callback(null, user, context); }
- Update the
.env
secrets used by your local hive instance that are found when viewing your new application on Auth0:AUTH_LEGACY_AUTH0
(set this to1
for enabling the migration.)AUTH_LEGACY_AUTH0_CLIENT_ID
(e.g.rGSrExtM9sfilpF8kbMULkMNYI2SgXro
)AUTH_LEGACY_AUTH0_CLIENT_SECRET
(e.g.gJjNQJsCaOC0nCKTgqWv2wvrh1XXXb-iqzVdn8pi2nSPq2TxxxJ9FIUYbNjheXxx
)AUTH_LEGACY_AUTH0_ISSUER_BASE_URL
(e.g.https://foo-bars.us.auth0.com
)AUTH_LEGACY_AUTH0_AUDIENCE
(e.g.https://foo-bars.us.auth0.com/api/v2/
)