From 59bac7c8ce3d01775993c951e0a1766c277ec41c Mon Sep 17 00:00:00 2001 From: Owen <103096885+owen-reorg@users.noreply.github.com> Date: Tue, 10 Oct 2023 15:48:46 +0800 Subject: [PATCH] ci: refactor docker release workflow and image metadata (#59) * ci: Refactor Docker release workflow and image metadata --- .github/workflows/docker-release.yml | 103 ++++++++++++--------------- 1 file changed, 44 insertions(+), 59 deletions(-) diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml index e20e20cde9..2c931be5b8 100644 --- a/.github/workflows/docker-release.yml +++ b/.github/workflows/docker-release.yml @@ -1,16 +1,17 @@ name: DockerImage build and push on: + workflow_dispatch: push: - # Publish `v1.2.3` tags as releases. tags: - - v* + branches: + - develop + - main jobs: # Push image to GitHub Packages. push-op-node: runs-on: ubuntu-latest - if: github.event_name == 'push' steps: - uses: actions/checkout@v3 @@ -22,34 +23,28 @@ jobs: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - name: ImageId - id: image - run: | - IMAGE_ID=ghcr.io/${{ github.repository_owner }}/op-node - - # Change all uppercase to lowercase - IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') - # Strip git ref prefix from version - VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') - # Strip "v" prefix from tag name - [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') - # Use Docker `latest` tag convention - [ "$VERSION" == "main" ] && VERSION=latest - echo "IMAGE_ID=$IMAGE_ID">>$GITHUB_OUTPUT - echo "VERSION=$VERSION">>$GITHUB_OUTPUT + - name: image meta + id: meta + uses: docker/metadata-action@v5 + with: + images: | + ghcr.io/${{ github.repository_owner }}/op-node + tags: | + type=ref,event=branch + type=ref,event=tag + type=semver,pattern={{version}} + type=sha - name: Build and push uses: docker/build-push-action@v4 with: context: . file: ./op-node/Dockerfile push: true - tags: ${{ steps.image.outputs.IMAGE_ID }}:${{ steps.image.outputs.VERSION }},${{ steps.image.outputs.IMAGE_ID }}:latest - cache-from: type=registry,ref=${{ steps.image.outputs.IMAGE_ID }}:buildcache - cache-to: type=registry,ref=${{ steps.image.outputs.IMAGE_ID }}:buildcache,mode=max + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} push-op-batcher: runs-on: ubuntu-latest - if: github.event_name == 'push' steps: - uses: actions/checkout@v3 @@ -61,33 +56,28 @@ jobs: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - name: ImageId - id: image - run: | - IMAGE_ID=ghcr.io/${{ github.repository_owner }}/op-batcher - - # Change all uppercase to lowercase - IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') - # Strip git ref prefix from version - VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') - # Strip "v" prefix from tag name - [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') - # Use Docker `latest` tag convention - [ "$VERSION" == "main" ] && VERSION=latest - echo "IMAGE_ID=$IMAGE_ID">>$GITHUB_OUTPUT - echo "VERSION=$VERSION">>$GITHUB_OUTPUT + - name: image meta + id: meta + uses: docker/metadata-action@v5 + with: + images: | + ghcr.io/${{ github.repository_owner }}/op-batcher + tags: | + type=ref,event=branch + type=ref,event=tag + type=semver,pattern={{version}} + type=sha - name: Build and push uses: docker/build-push-action@v4 with: context: . file: ./op-batcher/Dockerfile push: true - tags: ${{ steps.image.outputs.IMAGE_ID }}:${{ steps.image.outputs.VERSION }},${{ steps.image.outputs.IMAGE_ID }}:latest - cache-from: type=registry,ref=${{ steps.image.outputs.IMAGE_ID }}:buildcache - cache-to: type=registry,ref=${{ steps.image.outputs.IMAGE_ID }}:buildcache,mode=max + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + push-op-proposer: runs-on: ubuntu-latest - if: github.event_name == 'push' steps: - uses: actions/checkout@v3 @@ -99,27 +89,22 @@ jobs: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - name: ImageId - id: image - run: | - IMAGE_ID=ghcr.io/${{ github.repository_owner }}/op-proposer - - # Change all uppercase to lowercase - IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') - # Strip git ref prefix from version - VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') - # Strip "v" prefix from tag name - [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') - # Use Docker `latest` tag convention - [ "$VERSION" == "main" ] && VERSION=latest - echo "IMAGE_ID=$IMAGE_ID">>$GITHUB_OUTPUT - echo "VERSION=$VERSION">>$GITHUB_OUTPUT + - name: image meta + id: meta + uses: docker/metadata-action@v5 + with: + images: | + ghcr.io/${{ github.repository_owner }}/op-proposer + tags: | + type=ref,event=branch + type=ref,event=tag + type=semver,pattern={{version}} + type=sha - name: Build and push uses: docker/build-push-action@v4 with: context: . file: ./op-proposer/Dockerfile push: true - tags: ${{ steps.image.outputs.IMAGE_ID }}:${{ steps.image.outputs.VERSION }},${{ steps.image.outputs.IMAGE_ID }}:latest - cache-from: type=registry,ref=${{ steps.image.outputs.IMAGE_ID }}:buildcache - cache-to: type=registry,ref=${{ steps.image.outputs.IMAGE_ID }}:buildcache,mode=max + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }}