From b66ca6e2e6cf3ad687c30342e9f7d1d5898ff54d Mon Sep 17 00:00:00 2001 From: Rafael Cardenas Date: Thu, 27 Jun 2024 15:49:07 -0600 Subject: [PATCH] feat: docker build --- .github/workflows/ci.yml | 211 ++++++++++++++++++++++-------------- api/package.json | 1 - docker/runes-api.dockerfile | 2 +- 3 files changed, 128 insertions(+), 86 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0b46a71..77daf21 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,10 +55,6 @@ jobs: run: npm run lint:unused-exports api-test: - strategy: - fail-fast: false - matrix: - suite: [api] runs-on: ubuntu-latest defaults: run: @@ -103,12 +99,12 @@ jobs: docker-compose -f ../docker/docker-compose.dev.postgres.yml logs -t -f --no-color &> docker-compose-logs.txt & - name: Run tests - run: npm run test:${{ matrix.suite }} -- --coverage + run: npm run test -- --coverage - # - name: Upload coverage to Codecov - # uses: codecov/codecov-action@v4 - # with: - # token: ${{ secrets.CODECOV_TOKEN }} + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v4 + with: + token: ${{ secrets.CODECOV_TOKEN }} - name: Print integration environment logs run: cat docker-compose-logs.txt @@ -147,12 +143,12 @@ jobs: rustup update RUST_BACKTRACE=1 cargo test --all -- --test-threads=1 - # - name: Upload coverage reports to Codecov - # uses: codecov/codecov-action@v4.0.1 - # with: - # token: ${{ secrets.CODECOV_TOKEN }} - # slug: hirosystems/ordhook - + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@v4 + with: + token: ${{ secrets.CODECOV_TOKEN }} + slug: hirosystems/ordhook + - name: Print integration environment logs run: cat docker-compose-logs.txt if: failure() @@ -161,72 +157,119 @@ jobs: run: docker-compose -f docker/docker-compose.dev.postgres.yml down -v -t 0 if: always() - # runehook-build-publish: - # runs-on: ubuntu-latest - # needs: runehook-test - # outputs: - # docker_image_digest: ${{ steps.docker_push.outputs.digest }} - # new_release_published: ${{ steps.semantic.outputs.new_release_published }} - # steps: - # - uses: actions/checkout@v4 - # with: - # persist-credentials: false - - # - name: Semantic Release - # uses: cycjimmy/semantic-release-action@v4 - # id: semantic - # # Only run on non-PR events or only PRs that aren't from forks - # if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository - # env: - # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # SEMANTIC_RELEASE_PACKAGE: ${{ github.event.repository.name }} - # with: - # semantic_version: 19 - # extra_plugins: | - # @semantic-release/changelog@6.0.3 - # @semantic-release/git@10.0.1 - # conventional-changelog-conventionalcommits@6.1.0 - - # - name: Checkout tag - # if: steps.semantic.outputs.new_release_version != '' - # uses: actions/checkout@v4 - # with: - # persist-credentials: false - # ref: v${{ steps.semantic.outputs.new_release_version }} - - # - name: Set up Docker Buildx - # uses: docker/setup-buildx-action@v3 - - # - name: Docker Meta - # id: meta - # uses: docker/metadata-action@v5 - # with: - # images: | - # ${{ env.DOCKER_IMAGE }} - # tags: | - # type=ref,event=branch - # type=ref,event=pr - # type=semver,pattern={{version}},value=${{ steps.semantic.outputs.new_release_version }},enable=${{ steps.semantic.outputs.new_release_version != '' }} - # type=semver,pattern={{major}}.{{minor}},value=${{ steps.semantic.outputs.new_release_version }},enable=${{ steps.semantic.outputs.new_release_version != '' }} - # type=raw,value=latest,enable={{is_default_branch}} - - # - name: Log in to DockerHub - # uses: docker/login-action@v3 - # with: - # username: ${{ secrets.DOCKERHUB_USERNAME }} - # password: ${{ secrets.DOCKERHUB_PASSWORD }} - - # - name: Build/Push Image - # uses: docker/build-push-action@v5 - # id: docker_push - # with: - # context: . - # tags: ${{ steps.meta.outputs.tags }} - # labels: ${{ steps.meta.outputs.labels }} - # file: ./dockerfiles/components/ordhook.dockerfile - # build-args: | - # GIT_COMMIT=${{ env.GITHUB_SHA_SHORT }} - # cache-from: type=gha - # cache-to: type=gha,mode=max - # # Only push if (there's a new release on main branch, or if building a non-main branch) and (Only run on non-PR events or only PRs that aren't from forks) - # push: ${{ (github.ref != 'refs/heads/main' || steps.semantic.outputs.new_release_version != '') && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }} + semantic-release: + runs-on: ubuntu-latest + needs: [api-lint, api-test, runehook-test] + outputs: + new_release_version: ${{ steps.semantic.outputs.new_release_version }} + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Semantic Release + uses: cycjimmy/semantic-release-action@v4 + id: semantic + # Only run on non-PR events or only PRs that aren't from forks + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SEMANTIC_RELEASE_PACKAGE: ${{ github.event.repository.name }} + with: + semantic_version: 19 + extra_plugins: | + @semantic-release/changelog@6.0.3 + @semantic-release/git@10.0.1 + conventional-changelog-conventionalcommits@6.1.0 + + runehook-build-publish: + runs-on: ubuntu-latest + needs: semantic-release + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Checkout tag + if: needs.semantic-release.outputs.new_release_version != '' + uses: actions/checkout@v4 + with: + persist-credentials: false + ref: v${{ needs.semantic-release.outputs.new_release_version }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Docker Meta + id: meta + uses: docker/metadata-action@v5 + with: + images: | + hirosystems/runehook + tags: | + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}},value=${{ needs.semantic-release.outputs.new_release_version }},enable=${{ needs.semantic-release.outputs.new_release_version != '' }} + type=semver,pattern={{major}}.{{minor}},value=${{ needs.semantic-release.outputs.new_release_version }},enable=${{ needs.semantic-release.outputs.new_release_version != '' }} + type=raw,value=latest,enable={{is_default_branch}} + + - name: Log in to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + + - name: Build/Push Image + uses: docker/build-push-action@v5 + id: docker_push + with: + context: . + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + file: ./docker/runehook.dockerfile + # build-args: | + # GIT_COMMIT=${{ env.GITHUB_SHA_SHORT }} + cache-from: type=gha + cache-to: type=gha,mode=max + # Only push if (there's a new release on main branch, or if building a non-main branch) and (Only run on non-PR events or only PRs that aren't from forks) + push: ${{ (github.ref != 'refs/heads/main' || needs.semantic-release.outputs.new_release_version != '') && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }} + + api-build-publish: + runs-on: ubuntu-latest + needs: semantic-release + steps: + - uses: actions/checkout@v4 + with: + token: ${{ secrets.GH_TOKEN || secrets.GITHUB_TOKEN }} + fetch-depth: 0 + persist-credentials: false + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Docker Meta + id: meta + uses: docker/metadata-action@v5 + with: + images: | + hirosystems/runes-api + tags: | + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}},value=${{ needs.semantic-release.outputs.new_release_version }},enable=${{ needs.semantic-release.outputs.new_release_version != '' }} + type=semver,pattern={{major}}.{{minor}},value=${{ needs.semantic-release.outputs.new_release_version }},enable=${{ needs.semantic-release.outputs.new_release_version != '' }} + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + + - name: Build/Tag/Push Image + uses: docker/build-push-action@v5 + with: + context: . + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + # Only push if (there's a new release on main branch, or if building a non-main branch) and (Only run on non-PR events or only PRs that aren't from forks) + push: ${{ (github.ref != 'refs/heads/master' || needs.semantic-release.outputs.new_release_version != '') && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }} diff --git a/api/package.json b/api/package.json index d1777f9..9af0070 100644 --- a/api/package.json +++ b/api/package.json @@ -8,7 +8,6 @@ "start": "node dist/src/index.js", "start-ts": "ts-node ./src/index.ts", "test": "jest --runInBand", - "test:api": "npm run test -- ./tests/api/", "generate:git-info": "rimraf .git-info && node_modules/.bin/api-toolkit-git-info", "lint:eslint": "eslint . --ext .ts,.tsx -f unix", "lint:prettier": "prettier --check src/**/*.ts tests/**/*.ts", diff --git a/docker/runes-api.dockerfile b/docker/runes-api.dockerfile index e916709..8664b9a 100644 --- a/docker/runes-api.dockerfile +++ b/docker/runes-api.dockerfile @@ -1,4 +1,4 @@ -FROM node:18-alpine +FROM node:20-alpine WORKDIR /app COPY ./api /app