diff --git a/.github/workflows/push-main-dockerhub.yml b/.github/workflows/push-main-dockerhub.yml new file mode 100644 index 0000000..54f1eab --- /dev/null +++ b/.github/workflows/push-main-dockerhub.yml @@ -0,0 +1,151 @@ +name: push-main-dockerhub + +# 1. Run unit and integration tests +# 2. Push containers to dockerhub with tag based on incrementing build number +# 3. Recommit an update to the chart's deployments with the updated build number in the `deployment` branch + +on: + push: + branches: + - main + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Install deps + run: | + pip3 install -r requirements_api.txt -r requirements_worker.txt -r requirements_dev.txt + pip3 install --upgrade protobuf + + - name: Bring up stack + run: make up-dbs && sleep 30 + + - name: Check stack + run: make ps + + - name: Run tests with coverage + run: make test-coverage + + - uses: codecov/codecov-action@v2 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: ./coverage.xml + fail_ci_if_error: true + + docker: + runs-on: ubuntu-latest + outputs: + tag: ${{ steps.source.outputs.TAG }} + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - id: last + uses: pozetroninc/github-action-get-latest-release@master + with: + repository: ${{ github.repository }} + + - name: Tag name + id: source + run: | + echo ::set-output name=TAG::${{ steps.last.outputs.release }}-${{ github.run_number }} + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push (API) + uses: docker/build-push-action@v2 + with: + context: . + build-args: | + SERVICE_NAME=api + file: ./Dockerfile + target: prod + push: true + tags: sudoblock/icon-contracts-api:latest, sudoblock/icon-contracts-api:${{ steps.source.outputs.TAG }} + + - name: Build and push (WORKER) + uses: docker/build-push-action@v2 + with: + context: . + build-args: | + SERVICE_NAME=worker + file: ./Dockerfile + target: prod + push: true + tags: sudoblock/icon-contracts-worker:latest, sudoblock/icon-contracts-worker:${{ steps.source.outputs.TAG }} + + push_refs: + runs-on: ubuntu-latest + needs: docker + strategy: + matrix: + include: + - cluster: dev-lax + network_name: mainnet + network_version: v1 + - cluster: dev-lax + network_name: sejong + network_version: v1 + + steps: + + - name: Checkout charts repo + uses: actions/checkout@v2 + with: + repository: sudoblockio/icon-charts + ref: main + path: charts + token: ${{ secrets.ICON_CHARTS_PAT }} + + - name: Git pull the latest + run: | + git pull + working-directory: charts + + - name: Update dev-lax mainnet deployment values file (API) + uses: fjogeleit/yaml-update-action@master + with: + workDir: charts + repository: sudoblockio/icon-charts + valueFile: 'deployments/${{ matrix.cluster }}/${{ matrix.network_name }}-${{ matrix.network_version }}/contracts/values.yaml' + propertyPath: 'api.image.tag' + value: ${{needs.docker.outputs.tag}} + branch: main + createPR: 'false' + updateFile: true + commitChange: false + + - name: Update dev-lax mainnet deployment values file (WORKER) + uses: fjogeleit/yaml-update-action@master + with: + workDir: charts + repository: sudoblockio/icon-charts + valueFile: 'deployments/${{ matrix.cluster }}/${{ matrix.network_name }}-${{ matrix.network_version }}/contracts/values.yaml' + propertyPath: 'worker.image.tag' + value: ${{needs.docker.outputs.tag}} + branch: main + createPR: 'false' + updateFile: true + commitChange: false + + - name: Configure credentials + uses: oleksiyrudenko/gha-git-credentials@v2-latest + with: + token: '${{ secrets.ICON_CHARTS_PAT }}' + global: true + + - name: Commit all updates + run: | + git add -A + git commit -m "contracts ${{ matrix.cluster }}/${{ matrix.network_name }}-${{ matrix.network_version }} deployment image version to ${{needs.docker.outputs.tag}}" + git push origin + working-directory: charts