GHA - Only publish docker builds on main branch #106
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: All tools CI | |
on: | |
push: | |
branches: | |
- main | |
paths: | |
- 'operations/' | |
- '.github/workflows/all-tools.yml' | |
pull_request: | |
branches: | |
- main | |
paths: | |
- 'operations/' | |
- '.github/workflows/all-tools.yml' | |
jobs: | |
changes: | |
runs-on: [self-hosted, ubuntu-20.04, X64, small] | |
name: Filter commit changes | |
outputs: | |
all-tools: ${{ steps.filter.outputs['all-tools'] }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Filter commit changes | |
uses: dorny/paths-filter@v2 | |
id: filter | |
with: | |
base: ${{ github.ref }} | |
list-files: "json" | |
filters: | | |
all-tools: | |
- 'operations/**' | |
- '.github/workflows/all-tools.yml' | |
- '.github/workflows/reuse-*.yml' | |
store_image_name_and_tags: | |
uses: ./.github/workflows/reuse-store-image-name-and-tags.yml | |
check_image_tags_exist: | |
runs-on: [self-hosted, ubuntu-20.04, X64, small] | |
name: Check image tags exist | |
needs: [ changes, store_image_name_and_tags ] | |
if: ${{ needs.changes.outputs['all-tools'] == 'false' }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Check image tags exist | |
uses: ./.github/actions/check-image-tags-exist | |
with: | |
last_commit_tag: ${{ needs.store_image_name_and_tags.outputs.last_commit_tag }} | |
image_name: consensys/linea-alltools | |
all-tools-tag-only: | |
runs-on: [self-hosted, ubuntu-20.04, X64, small] | |
name: All tools tag only | |
needs: [ changes, store_image_name_and_tags, check_image_tags_exist ] | |
if: ${{ github.event_name != 'pull_request' && needs.changes.outputs['all-tools'] == 'false' }} | |
outputs: | |
image_tagged: ${{ steps.image_tag_push.outputs.image_tagged }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Tag and push image | |
id: image_tag_push | |
uses: ./.github/actions/image-tag-and-push | |
with: | |
commit_tag: ${{ needs.store_image_name_and_tags.outputs.commit_tag }} | |
last_commit_tag: ${{ needs.store_image_name_and_tags.outputs.last_commit_tag }} | |
develop_tag: ${{ needs.store_image_name_and_tags.outputs.develop_tag }} | |
image_name: consensys/linea-alltools | |
last_commit_tag_exists: ${{ needs.check_image_tags_exist.outputs.last_commit_tag_exists }} | |
docker_username: ${{ secrets.DOCKERHUB_USERNAME }} | |
docker_password: ${{ secrets.DOCKERHUB_TOKEN }} | |
build-and-publish: | |
needs: [ changes, store_image_name_and_tags, all-tools-tag-only ] | |
if: ${{ always() && (needs.changes.outputs['all-tools'] == 'true' || needs.all-tools-tag-only.result != 'success' || needs.all-tools-tag-only.outputs.image_tagged != 'true') }} | |
runs-on: [self-hosted, ubuntu-20.04, X64, small] | |
env: | |
COMMIT_TAG: ${{ needs.store_image_name_and_tags.outputs.commit_tag }} | |
DEVELOP_TAG: ${{ needs.store_image_name_and_tags.outputs.develop_tag }} | |
IMAGE_NAME: consensys/linea-alltools | |
name: All tools build and push | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
ssh-key: ${{ secrets.SELF_GITHUB_SSH_KEY }} | |
submodules: true | |
persist-credentials: false | |
- name: Login to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
# Note: Building arm* images on QEMU emulator can get extremely slow | |
# when downloading large packages with npm / yarn. Arm* based docker | |
# images are not necessarily needed as we run amd64 machines for most | |
# cases. We can later set up self-hosted arm64 github runners if we | |
# want arm* based images back. | |
# - name: Set up QEMU | |
# uses: docker/setup-qemu-action@v3 | |
# with: | |
# platforms: 'arm64,arm' | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Show the "version" build argument | |
run: | | |
echo "We inject the commit tag in the docker image ${{ env.COMMIT_TAG }}" | |
echo COMMIT_TAG=${{ env.COMMIT_TAG }} >> GITHUB_ENV | |
- name: Build and push all tools image | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: ./operations/Dockerfile | |
platforms: linux/amd64 # Note: Build amd64 image only | |
push: ${{ github.event_name != 'pull_request' }} | |
tags: | | |
${{ env.IMAGE_NAME }}:${{ env.COMMIT_TAG }} | |
cache-from: type=registry,ref=${{ env.IMAGE_NAME }}:buildcache | |
cache-to: type=registry,ref=${{ env.IMAGE_NAME }}:buildcache,mode=max |