diff --git a/.github/workflows/lint-go.yaml b/.github/workflows/lint-go.yaml index 408e01ae5..924b8a286 100644 --- a/.github/workflows/lint-go.yaml +++ b/.github/workflows/lint-go.yaml @@ -5,6 +5,7 @@ on: branches: - master pull_request: + workflow_call: permissions: contents: read diff --git a/.github/workflows/on-master-commit.yaml b/.github/workflows/on-master-commit.yaml new file mode 100644 index 000000000..a34370857 --- /dev/null +++ b/.github/workflows/on-master-commit.yaml @@ -0,0 +1,45 @@ +name: Master CI + +on: + push: + branches: + - 'master' + - 'master-*' + +jobs: + + run-unit-tests: + name: Run Unit Tests + uses: ./.github/workflows/test.yaml + + generate-tags: + name: Generate Docker Tags + runs-on: ubuntu-latest + outputs: + tag_date: ${{ steps.tag_date.outputs.tag_date }} + short_sha: ${{ steps.short_sha.outputs.short_sha }} + steps: + - name: Generate Tag Date + id: tag_date + run: echo "tag_date=$(date +'%Y%m%d')" >> "$GITHUB_OUTPUT" + - name: Generate Short SHA + id: short_sha + run: echo "short_sha=$(echo $GITHUB_SHA | cut -c1-7)" >> "$GITHUB_OUTPUT" + + publish-docker-image: + name: Publish Docker Image + uses: ./.github/workflows/publish-docker-image.yaml + secrets: inherit + needs: + - run-unit-tests + - generate-tags + permissions: + contents: read + packages: write + with: + images: | + ghcr.io/${{ github.repository }} + # eg: master-20240321-7d8e9f2 + tags: | + type=raw,value=master-${{ needs.generate-tags.outputs.tag_date }}-${{ needs.generate-tags.outputs.short_sha }} + type=raw,value=master-latest diff --git a/.github/workflows/on-pre-release.yaml b/.github/workflows/on-pre-release.yaml new file mode 100644 index 000000000..087c45db6 --- /dev/null +++ b/.github/workflows/on-pre-release.yaml @@ -0,0 +1,29 @@ +name: Pre-Release CI + +on: + release: + types: + - prereleased + +jobs: + + run-unit-tests: + name: Run Unit Tests + uses: ./.github/workflows/test.yaml + + publish-docker-image: + name: Publish Pre-Release Docker Image + uses: ./.github/workflows/publish-docker-image.yaml + secrets: inherit + needs: + - run-unit-tests + permissions: + contents: read + packages: write + with: + environment: docker-publish + images: | + ${{ github.repository }} + ghcr.io/${{ github.repository }} + tags: | + type=raw,value=${{ github.event.release.tag_name }} diff --git a/.github/workflows/on-release.yaml b/.github/workflows/on-release.yaml new file mode 100644 index 000000000..fe96a16a9 --- /dev/null +++ b/.github/workflows/on-release.yaml @@ -0,0 +1,30 @@ +name: Release CI + +on: + release: + types: + - released + +jobs: + + run-unit-tests: + name: Run Unit Tests + uses: ./.github/workflows/test.yaml + + publish-docker-image: + name: Publish Pre-Release Docker Image + uses: ./.github/workflows/publish-docker-image.yaml + secrets: inherit + needs: + - run-unit-tests + permissions: + contents: read + packages: write + with: + environment: docker-publish + images: | + ${{ github.repository }} + ghcr.io/${{ github.repository }} + tags: | + type=raw,value=${{ github.event.release.tag_name }} + type=raw,value=latest diff --git a/.github/workflows/publish-docker-images.yaml b/.github/workflows/publish-docker-images.yaml new file mode 100644 index 000000000..7ffed7cc3 --- /dev/null +++ b/.github/workflows/publish-docker-images.yaml @@ -0,0 +1,77 @@ +name: Publish Docker Image + +on: + workflow_call: + inputs: + environment: + type: string + required: false + description: 'The environment to publish the Docker image to.' + tags: + type: string + required: true + description: 'The tags to apply to the Docker image.' + images: + type: string + required: true + description: 'The images to publish' + workflow_dispatch: + +jobs: + build-and-push-image: + name: Build and Push Docker Image + runs-on: ubuntu-latest + + permissions: + contents: read + packages: write + + environment: ${{ inputs.environment }} + steps: + + - name: Checkout Repo + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Docker Hub + uses: docker/login-action@v2 + # Only log in to Docker Hub if the event is a release + if: ${{ inputs.environment == 'docker-publish' }} + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v4 + env: + IMAGES: ${{ inputs.images || format('ghcr.io/{0}', github.repository) }} + TAGS: ${{ inputs.tags || format('type=raw,value={0}-{1}', github.ref, github.sha) }} + with: + # default to ghcr.io for workflow_dispatch + images: ${{ inputs.images || format('ghcr.io/{0}', github.repository) }} + # use the branch + sha if workflow_dispatch + tags: ${{ inputs.tags || format('type=raw,value={0}-{1}', github.ref, github.sha) }} + + - name: Push to Registry(s) + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + provenance: false + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + diff --git a/.github/workflows/release-ghcr-image.yaml b/.github/workflows/release-ghcr-image.yaml deleted file mode 100644 index 5ea46fc55..000000000 --- a/.github/workflows/release-ghcr-image.yaml +++ /dev/null @@ -1,45 +0,0 @@ -name: Create ghcr.io Docker image - -# Images are published manually -on: - workflow_dispatch: - inputs: - tag: - description: 'Tag for the image' - required: false - default: ${{ github.sha }} - -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository }} - -jobs: - build-and-push-image: - runs-on: ubuntu-latest - - permissions: - contents: read - packages: write - - steps: - - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to the Container registry - uses: docker/login-action@3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Build and push Docker image - uses: docker/build-push-action@5 - with: - context: . - push: true - tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.event.inputs.tag }} diff --git a/.github/workflows/release-official-image.yaml b/.github/workflows/release-official-image.yaml deleted file mode 100644 index 8cdc780e9..000000000 --- a/.github/workflows/release-official-image.yaml +++ /dev/null @@ -1,57 +0,0 @@ -name: Publish docker image - -on: - push: - tags: - - 'v*' - -jobs: - push_to_registries: - runs-on: ubuntu-latest - permissions: - packages: write - contents: read - - environment: docker-publish - - steps: - - uses: actions/checkout@v3 - - # Add support for more platforms with QEMU (optional) - # https://github.com/docker/setup-qemu-action - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Log in to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Log in to the Container registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@v4 - with: - images: | - vechain/thor - ghcr.io/${{ github.repository }} - - - name: Build and push - uses: docker/build-push-action@v4 - with: - context: . - platforms: linux/amd64,linux/arm64 - push: true - provenance: false - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/test-docker-build.yaml b/.github/workflows/test-docker-build.yaml index 01f925a50..0cc60a006 100644 --- a/.github/workflows/test-docker-build.yaml +++ b/.github/workflows/test-docker-build.yaml @@ -1,9 +1,6 @@ name: Test Docker Buld on: - push: - branches: - - master pull_request: branches: - master diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index ec9c475f6..d6116a2f5 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -1,14 +1,10 @@ name: Unit Tests -on: - push: - branches: - - 'master' - - 'master-*' - +on: pull_request: branches: - master + workflow_call: jobs: unit_tests: @@ -18,9 +14,9 @@ jobs: os: [ubuntu-latest, macos-latest, windows-latest] include: - go-version: 1.19.x - os: ubuntu-latest + os: ubuntu-latest - go-version: 1.20.x - os: ubuntu-latest + os: ubuntu-latest runs-on: ${{ matrix.os }} steps: - name: Checkout code @@ -33,11 +29,11 @@ jobs: - name: Make all run: make all - + - name: Make Test id: unit-test run: make test - + - name: Post To Slack if: always() && github.ref == 'refs/heads/master' && (steps.unit-test.outcome == 'failure') uses: slackapi/slack-github-action@v1.24.0 @@ -52,7 +48,7 @@ jobs: env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} test_coverage: - runs-on: ubuntu-latest + runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3