From 5c92faae511613fb6d17ca68251ae465cb93520a Mon Sep 17 00:00:00 2001 From: Iacami Gevaerd Date: Fri, 17 Nov 2023 12:08:26 -0300 Subject: [PATCH] chore: unify gh workflows with docker build and argo deploy --- .github/workflows/docker.yml | 44 ------------- .github/workflows/nodejs.yml | 123 +++++++++++++++++++++++++++++++---- 2 files changed, 112 insertions(+), 55 deletions(-) delete mode 100644 .github/workflows/docker.yml diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml deleted file mode 100644 index d2ed337d..00000000 --- a/.github/workflows/docker.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: 'docker publish' -on: - push: - branches: - - develop - -jobs: - build: - runs-on: 'ubuntu-latest' - - steps: - - name: Setup Node.js environment - uses: actions/setup-node@v3 - with: - node-version: '16' - - - name: 'Checkout Project' - uses: 'actions/checkout@v3' - with: - fetch-depth: 1 - - - name: Install Dependencies and lint code - run: yarn install && yarn lint - - - name: Test build - run: yarn build-release - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Login to DockerHub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Build docker image - uses: docker/build-push-action@v2 - with: - context: ./ - file: ./Dockerfile - builder: ${{ steps.buildx.outputs.name }} - push: true - tags: vnguyen/openbeta-graph-api:latest diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 88cde9a8..9d4c773a 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -4,25 +4,120 @@ on: push: branches: - develop + pull_request: + release: + types: [published] + jobs: - build: - runs-on: 'ubuntu-latest' + # deploy to staging by commiting to api-server-deployment repo + deploy-staging: + runs-on: ubuntu-latest + if: github.ref_name == 'develop' + needs: docker + steps: + - name: 'Checkout Project' + uses: 'actions/checkout@v4' + with: + fetch-depth: 1 + repository: 'api-server-deployment' + token: ${{ secrets.GH_DEPLOYMENT_REPO_TOKEN }} + - uses: imranismail/setup-kustomize@v2 + - run: | + kustomize edit set image vnguyen/openbeta-graph-api:sha-${GITHUB_SHA} + - name: Check if there are changes + id: changes + uses: UnicornGlobal/has-changes-action@v1.0.11 + - name: Push if tag has changes + if: steps.changes.outputs.changed == 1 + run: | + cd api-server-deployment/stage + git config user.name github-actions + git config user.email github-actions@github.com + git commit -am "Update deployment. Code=${GITHUB_SHA}" + git push + # deploy to prod by commiting to api-server-deployment repo + deploy-prod: + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags/v') + needs: docker steps: - - name: Setup Node.js environment - uses: actions/setup-node@v3 + - name: 'Checkout Project' + uses: 'actions/checkout@v4' with: - node-version: '16.15' + fetch-depth: 1 + repository: 'api-server-deployment' + token: ${{ secrets.GH_DEPLOYMENT_REPO_TOKEN }} + - uses: imranismail/setup-kustomize@v2 + - run: | + kustomize edit set image vnguyen/openbeta-graph-api:${GITHUB_REF} + - name: Check if there are changes + id: changes + uses: UnicornGlobal/has-changes-action@v1.0.11 + - name: Push if tag has changes + if: steps.changes.outputs.changed == 1 + run: | + git config user.name github-actions + git config user.email github-actions@github.com + git commit -am "Update deployment. Code=${GITHUB_REF}" + git push + + # build docker image and push to registry + docker: + runs-on: ubuntu-latest + needs: test + steps: + - name: 'Checkout Project' + uses: 'actions/checkout@v3' + with: + fetch-depth: 1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: | + vnguyen/openbeta-graph-api + tags: | + type=ref,event=branch + type=semver,pattern={{raw}} + type=ref,event=pr + type=sha,format=long + + - name: Build docker image + uses: docker/build-push-action@v2 + with: + context: ./ + file: ./Dockerfile + builder: ${{ steps.buildx.outputs.name }} + push: true + tags: ${{ steps.meta.outputs.tags }} + # setup basic machine to run all kinds of tests: lint, unit, integration, types + test: + runs-on: 'ubuntu-latest' + steps: - name: 'Checkout Project' uses: 'actions/checkout@v3' with: fetch-depth: 1 - - name: Install Dependencies and lint code - run: yarn install && yarn lint + - name: Setup Node.js environment + uses: actions/setup-node@v3 + with: + node-version: '16.15' + cache: 'yarn' - name: Start MongoDB uses: supercharge/mongodb-github-action@1.8.0 @@ -30,6 +125,12 @@ jobs: mongodb-version: 5 mongodb-replica-set: rs0 + - name: Install dependencies + run: yarn install --immutable + + - name: Lint code + run: yarn lint + - name: Wait for the database to start run: wget -qO- https://raw.githubusercontent.com/eficode/wait-for/$WAIT_FOR_VERSION/wait-for | sh -s -- localhost:27017 -- echo "Database is up" env: @@ -44,8 +145,8 @@ jobs: run: | docker container restart mongodb - - name: Build and run tests - run: yarn test - env: - NODE_OPTIONS: --experimental-vm-modules + - name: Run tests + run: yarn test --ci + - name: Build sources + run: yarn build-release --noEmit