From b46e3cc9494ca89af49748d01dfb967de1c62e7d Mon Sep 17 00:00:00 2001 From: Baptiste Guerin Date: Wed, 6 Nov 2024 15:33:05 -0300 Subject: [PATCH] ci: add actions --- .github/actions/setup-repo/action.yml | 18 +++++++ .github/workflows/lint.yml | 27 ++++++++++ .github/workflows/update_production.yml | 56 +++++++++++++++++++++ .github/workflows/update_staging.yml | 65 +++++++++++++++++++++++++ Dockerfile | 4 +- docker-compose.yaml | 4 +- 6 files changed, 170 insertions(+), 4 deletions(-) create mode 100644 .github/actions/setup-repo/action.yml create mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/update_production.yml create mode 100644 .github/workflows/update_staging.yml diff --git a/.github/actions/setup-repo/action.yml b/.github/actions/setup-repo/action.yml new file mode 100644 index 00000000..521a2cdc --- /dev/null +++ b/.github/actions/setup-repo/action.yml @@ -0,0 +1,18 @@ +name: Setup repo +description: Runs all steps to setup the repo (install node_modules, build, etc...) +inputs: + registry-token: + description: 'PAT to access registries' +runs: + using: 'composite' + steps: + - uses: actions/checkout@v3 + - name: Set up Bun + uses: oven-sh/setup-bun@v1 + with: + bun-version: latest + - name: Install dependencies + run: bun install + env: + GITHUB_REGISTRY_TOKEN: ${{ secrets.GH_REGISTRY_ACCESS_TOKEN }} + shell: bash \ No newline at end of file diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..fc926fe8 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,27 @@ +name: test code quality + +on: + pull_request: + push: + branches: + - main + +defaults: + run: + shell: bash + +jobs: + check-lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up Bun + uses: oven-sh/setup-bun@v1 + with: + bun-version: latest + - name: Install dependencies + run: bun install + env: + GITHUB_REGISTRY_TOKEN: ${{ secrets.GH_REGISTRY_ACCESS_TOKEN }} + - name: Lint merkl-api codebase + run: yarn lint:ci \ No newline at end of file diff --git a/.github/workflows/update_production.yml b/.github/workflows/update_production.yml new file mode 100644 index 00000000..ebce20de --- /dev/null +++ b/.github/workflows/update_production.yml @@ -0,0 +1,56 @@ +name: Trigger production deployment + +on: + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' + +defaults: + run: + shell: bash + +jobs: + tag-image: + runs-on: ubuntu-latest + env: + IMAGE_URL: europe-west1-docker.pkg.dev/angle-artifacts/angle-docker-registry/merkl-app + steps: + - uses: 'google-github-actions/auth@v0' + with: + credentials_json: '${{ secrets.GCLOUD_SECRET_ARTIFACTS }}' + - name: Login to Docker + run: gcloud auth configure-docker europe-west1-docker.pkg.dev + - name: Pull and tag image + run: | + export SHORT_SHA=${GITHUB_SHA:0:7} + export VERSION=${GITHUB_REF#refs/tags/} + docker pull $IMAGE_URL:$SHORT_SHA + docker tag $IMAGE_URL:$SHORT_SHA $IMAGE_URL:$VERSION + docker push $IMAGE_URL:$VERSION + trigger-production-deployment: + runs-on: ubuntu-latest + needs: tag-image + steps: + - name: Install dependencies + run: | + sudo snap install yq + - name: Clone deployments repo + uses: actions/checkout@v3 + with: + repository: AngleProtocol/deployments + token: ${{ secrets.ACCESS_TOKEN }} + path: deployments + - name: Modify config.production.yaml and push to deployments + run: | + cd deployments + + export VERSION=${GITHUB_REF#refs/tags/} + yq -i '.merkl-app.version = strenv(VERSION)' ./config.production.yaml + + git config --global user.email "baptiste@angle.money" + git config --global user.name "BaptistG" + + git add ./config.production.yaml + git commit -m "Update config.production.yaml with merkl-app version $VERSION" + + git push diff --git a/.github/workflows/update_staging.yml b/.github/workflows/update_staging.yml new file mode 100644 index 00000000..50896642 --- /dev/null +++ b/.github/workflows/update_staging.yml @@ -0,0 +1,65 @@ +name: Build image and trigger staging deployment + +on: + workflow_dispatch: + push: + branches: + - main + +defaults: + run: + shell: bash + +jobs: + build-image: + runs-on: ubuntu-latest + env: + IMAGE_URL: europe-west1-docker.pkg.dev/angle-artifacts/angle-docker-registry/merkl-app + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + - uses: 'google-github-actions/auth@v0' + with: + credentials_json: '${{ secrets.GCLOUD_SECRET_ARTIFACTS }}' + - name: Login to Docker + run: gcloud auth configure-docker europe-west1-docker.pkg.dev + - name: Build image + run: | + export SHORT_SHA=${GITHUB_SHA:0:7} + docker pull $IMAGE_URL:latest || true + docker build --build-arg GITHUB_REGISTRY_TOKEN=${{ secrets.GH_REGISTRY_ACCESS_TOKEN }} --cache-from $IMAGE_URL:latest --tag $IMAGE_URL:$SHORT_SHA --tag $IMAGE_URL:latest . + - name: Push image + run: | + export SHORT_SHA=${GITHUB_SHA:0:7} + docker push $IMAGE_URL:$SHORT_SHA + + trigger-staging-deployment: + runs-on: ubuntu-latest + needs: build-image + steps: + - name: Install dependencies + run: | + sudo snap install yq + - name: Clone deployments repo + uses: actions/checkout@v3 + with: + repository: AngleProtocol/deployments + token: ${{ secrets.ACCESS_TOKEN }} + path: deployments + - name: Modify config.staging.yaml and push to deployments + run: | + cd deployments + + export SHORT_SHA=${GITHUB_SHA:0:7} + + yq -i '.merkl-app.version = strenv(SHORT_SHA)' ./config.staging.yaml + + git config --global user.email "baptiste@angle.money" + git config --global user.name "BaptistG" + + git add ./config.staging.yaml + git commit -m "Update config.staging.yaml with merkl-app version $SHORT_SHA" + + git push diff --git a/Dockerfile b/Dockerfile index ad6dce88..e0468ec1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,4 +20,6 @@ COPY tsconfig.json ./ COPY ./ ./ -CMD ["bun", "dev"] \ No newline at end of file +EXPOSE 5173 + +CMD ["bun", "dev"] diff --git a/docker-compose.yaml b/docker-compose.yaml index 7e5facf2..09eb0325 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -11,8 +11,6 @@ services: - '3000:5173' env_file: - .env - environment: - PORT: '3000' volumes: - ./src:/app/src - - ./app:/app/app \ No newline at end of file + - ./app:/app/app