# Development - [Getting Started](#getting-started) - [Checkout repository](#checkout-your-fork) - [Requirements](#requirements) - [API Service](#api-service) * [Running Database](#running-database) * [Running Database Migration](#database-migration) * [Adding GitHub OAuth Configuration](#adding-github-oAuth-configuration) * [Running API Service](#running-api-service) * [Running Tests](#running-tests) * [Creating JWT for testing](#creating-jwt-for-testing) * [API Documentation](#api-documentation) ## Getting Started 1. [Create a GitHub Account][join-github] 1. [Setup GitHub access via SSH][gh-ssh] ## Checkout your fork To check out this repository: 1. Create your own [fork of this repository][fork-repo] 2. Clone it to your machine: ```shell git clone git@github.com:${YOUR_GITHUB_USERNAME}/hub.git cd hub git remote add upstream git@github.com:tektoncd/hub.git # prevent accidental push to upstream git remote set-url --push upstream no-push git fetch --all ``` Adding the upstream remote sets you up nicely for regularly [syncing your fork][sync-fork]. ## Requirements You must install these tools: 1. [`go`][install-go]: The language hub apis are built in. 1. [`git`][install-git]: For source control You may need to install more tools depending on the way you want to run the hub. ## API Service ### Running database Two ways to run postgresql database: - [Install postgresql][install-pg] on your local machine, or - Run a postgresql container using [docker][install-docker] / [podman][install-podman] If you have installed postgresql locally, you need to create a `hub` database. **NOTE:** Use the same configuration mentioned in `.env.dev` or update `.env.dev` with the configuration you used. The api service and db migration uses the db configuration from `.env.dev`. - If you want to run a postgres container, source the `.env.dev` so that `docker` can use the same database configuration as in `.env.dev` to create a container. Ensure you are in `hub/api` directory. ```bash source .env.dev docker run -d --name hub \ -e POSTGRES_USER=$POSTGRES_USER \ -e POSTGRES_PASSWORD=$POSTGRES_PASSWORD \ -e POSTGRES_DB=$POSTGRES_DB \ -p $POSTGRES_PORT:5432 \ postgres ``` ### Database Migration Once the database is up and running, you can run migration to create tables. Run the following command to run migration ```bash go run ./cmd/db ``` Wait until the migration completes and logs to show > DB initialisation successful !! ### Adding GitHub OAuth Configuration Create a GitHub OAuth. You can find the steps to create it [here][gh-oauth]. Use `http://localhost:8080` as the `Homepage URL` and `Authorization callback URL`. After creation, add the OAuth Client ID as `GH_CLIENT_ID` and Client Secret as `GH_CLIENT_SECRET` in [.env.dev][env-dev]. For `JWT_SIGNING_KEY`, you can use any random word. ### Running API Service Once the database is setup and the migration has been run, you can run api service by ```bash go run ./cmd/api ``` ### Running tests To run the tests, we need a test db. - If you have installed postgresql, create a `hub_test` database. - If you are running a container, create `hub_test` database in the same container. ```bash source .env.dev docker exec -it hub bash -c \ "PGPASSWORD=$POSTGRES_PASSWORD \ psql -h localhost -p 5432 -U postgres -c 'create database hub_test;'" ``` Once the `hub_test` database is created, you can run the test using following command: ```bash go test -p 1 -count=1 -v ./pkg/... ``` To re-generate the golden files use the below command This will run `go test a/package -test.update-golden=true` on all packages that are importing `gotest.tools/v3/golden` ```bash go test $(go list -f '{{ .ImportPath }} {{ .TestImports }}' ./... | grep gotest.tools/v3/golden | awk '{print $1}' | tr '\n' ' ') -test.update-golden=true ``` **NOTE:** `tests` use the database configurations from [test/config/env.test][env-test-file] ### Creating JWT for testing To create a JWT, create a HTML file adding below code ```html <!DOCTYPE html> <html> <body> <a href="https://github.com/login/oauth/authorize?client_id=<Add Client ID here>"> Login with github </a> </body> </html> ```` Add your OAuth Client ID from [.env.dev][env-dev] in HTML file in place of `<Add Client ID here>` and Save it. Open the HTML file, click on `Login with github` It will redirect you to GitHub. Once you authorize, it will redirect you to url localhost. for ex. `http://localhost:8080/?code=32d4a0b4eb6e9fbea731` Use the `code` from url in `/auth/login` API. It will create a user in db and return a JWT. #### JWT with Additional Scopes: By default, the JWT has only defaut scopes. If you need additional scopes in your JWT then add your GitHub username with required scopes in your local [config.yaml][config-yaml] And repeat the login process and you will have additonal scopes in JWT. ### API Documentation API documentation is generated by goa in file [`gen/http/openapi.yaml`][swagger-doc]. Also, you can call the API `/swagger/swagger.json` to get the documentaion. You can paste file content or API response in [swagger client][swagger]. [join-github]:https://github.com/join [gh-ssh]:https://help.github.com/articles/connecting-to-github-with-ssh/ [fork-repo]:https://help.github.com/articles/fork-a-repo/ [sync-fork]:https://help.github.com/articles/syncing-a-fork/ [install-go]:https://golang.org/doc/install [install-goa]:https://github.com/goadesign/goa [install-git]:https://help.github.com/articles/set-up-git/ [install-pg]: https://www.postgresql.org/docs/12/tutorial-install.html [install-docker]: https://docs.docker.com/engine/install/ [install-podman]: https://podman.io/getting-started/installation.html [env-dev]:https://github.com/tektoncd/hub/blob/master/api/.env.dev [env-test-file]: https://github.com/tektoncd/hub/blob/master/api/test/config/env.test [gh-oauth]:https://docs.github.com/en/developers/apps/creating-an-oauth-app [config-yaml]:https://github.com/tektoncd/hub/blob/master/config.yaml [swagger]:https://editor.swagger.io [swagger-doc]:https://github.com/tektoncd/hub/blob/master/api/gen/http/openapi.yaml