From 6ff5ff4ecd8e1ce6c2f04295cc7787c6ba23eca3 Mon Sep 17 00:00:00 2001 From: wuhuizuo Date: Wed, 15 Nov 2023 15:45:47 +0800 Subject: [PATCH] ci: refactor CI/CD flows for images (#123) Signed-off-by: wuhuizuo --- ...mages.yaml => pull-cd-builder-images.yaml} | 15 +- ...mages.yaml => pull-ci-runtime-images.yaml} | 27 ++- ...ges.yaml => pull-prod-runtime-images.yaml} | 8 +- .../workflows/release-cd-builder-images.yaml | 74 ++++++ ...es.yaml => release-ci-runtime-images.yaml} | 43 ++-- .../release-prod-runtime-images.yaml | 65 ++++++ .github/workflows/release.yaml | 210 ------------------ 7 files changed, 190 insertions(+), 252 deletions(-) rename .github/workflows/{pull-cd-build-base-images.yaml => pull-cd-builder-images.yaml} (86%) rename .github/workflows/{pull-ci-runtime-base-images.yaml => pull-ci-runtime-images.yaml} (72%) rename .github/workflows/{pull-prod-runtime-base-images.yaml => pull-prod-runtime-images.yaml} (92%) create mode 100644 .github/workflows/release-cd-builder-images.yaml rename .github/workflows/{pull-ci-release-utils-images.yaml => release-ci-runtime-images.yaml} (58%) create mode 100644 .github/workflows/release-prod-runtime-images.yaml delete mode 100644 .github/workflows/release.yaml diff --git a/.github/workflows/pull-cd-build-base-images.yaml b/.github/workflows/pull-cd-builder-images.yaml similarity index 86% rename from .github/workflows/pull-cd-build-base-images.yaml rename to .github/workflows/pull-cd-builder-images.yaml index deb042e8..d2f7f408 100644 --- a/.github/workflows/pull-cd-build-base-images.yaml +++ b/.github/workflows/pull-cd-builder-images.yaml @@ -22,13 +22,12 @@ jobs: packages: write strategy: + max-parallel: 1 matrix: + module: [builder-go, builder-others] + go-profile: [go-1.21, go-1.20, go-1.19] builder-profile: [local-docker] platform: [linux/amd64, linux/arm64] - # go-profile: [go-1.21, go-1.20, go-1.19] - # module: [builder-go, builder-others] - go-profile: [go-1.21] - module: [builder-go] exclude: - module: builder-others go-profile: go-1.20 @@ -65,7 +64,6 @@ jobs: path: "~/.skaffold/cache" key: skaffold/${{ matrix.platform }}/cd/${{ matrix.module }}/${{ matrix.go-profile }}-${{ github.sha }} restore-keys: | - skaffold/${{ matrix.platform }}/cd/${{ matrix.module }}/${{ matrix.go-profile }}-${{ github.sha }} skaffold/${{ matrix.platform }}/cd/${{ matrix.module }}/${{ matrix.go-profile }}- skaffold/${{ matrix.platform }}/cd/${{ matrix.module }}/ @@ -73,9 +71,10 @@ jobs: working-directory: dockerfiles/cd run: | skaffold build \ - --push=false \ --build-concurrency 1 \ - --platform ${{ matrix.platform }} \ + --cache-artifacts \ + --default-repo ghcr.io/pingcap-qe/cd/builders \ --module ${{ matrix.module }} \ + --platform ${{ matrix.platform }} \ --profile ${{ matrix.go-profile }},${{ matrix.builder-profile }} \ - --default-repo ghcr.io/pingcap-qe/cd/builders + --push=false diff --git a/.github/workflows/pull-ci-runtime-base-images.yaml b/.github/workflows/pull-ci-runtime-images.yaml similarity index 72% rename from .github/workflows/pull-ci-runtime-base-images.yaml rename to .github/workflows/pull-ci-runtime-images.yaml index bef6ce98..60f2947a 100644 --- a/.github/workflows/pull-ci-runtime-base-images.yaml +++ b/.github/workflows/pull-ci-runtime-images.yaml @@ -22,11 +22,17 @@ jobs: packages: write strategy: + max-parallel: 1 matrix: - go-profile: [go-1.21, go-1.20, go-1.19] - builder-profile: [local-docker] + module: [base, release-utils] platform: [linux/amd64, linux/arm64] - + builder-profile: [local-docker] + go-profile: [go-1.21, go-1.20, go-1.19] + exclude: + - module: release-utils + go-profile: go-1.20 + - module: release-utils + go-profile: go-1.19 steps: - name: Checkout sources uses: actions/checkout@v4 @@ -55,19 +61,20 @@ jobs: uses: actions/cache@v3 with: path: "~/.skaffold/cache" - key: skaffold/${{ matrix.platform }}/ci-base-${{ matrix.go-profile }}-${{ github.sha }} + key: skaffold/${{ matrix.platform }}/ci/${{ matrix.module }}/${{ matrix.go-profile }}-${{ github.sha }} restore-keys: | - skaffold/${{ matrix.platform }}/ci-base-${{ matrix.go-profile }}-${{ github.sha }} - skaffold/${{ matrix.platform }}/ci-base-${{ matrix.go-profile }}- - skaffold/${{ matrix.platform }}/ci-base- + skaffold/${{ matrix.platform }}/ci/${{ matrix.module }}/${{ matrix.go-profile }}- + skaffold/${{ matrix.platform }}/ci/${{ matrix.module }}/ + skaffold/${{ matrix.platform }}/ci/ - name: Build images working-directory: dockerfiles/ci run: | skaffold build \ + --build-concurrency 1 \ --cache-artifacts \ - --push=false \ + --default-repo ghcr.io/pingcap-qe/ci \ + --module ${{ matrix.module }} \ --platform ${{ matrix.platform }} \ - --module base \ --profile ${{ matrix.go-profile }},${{ matrix.builder-profile }} \ - --default-repo ghcr.io/pingcap-qe/ci + --push=false diff --git a/.github/workflows/pull-prod-runtime-base-images.yaml b/.github/workflows/pull-prod-runtime-images.yaml similarity index 92% rename from .github/workflows/pull-prod-runtime-base-images.yaml rename to .github/workflows/pull-prod-runtime-images.yaml index b0fa4151..57aea2d1 100644 --- a/.github/workflows/pull-prod-runtime-base-images.yaml +++ b/.github/workflows/pull-prod-runtime-images.yaml @@ -22,6 +22,7 @@ jobs: packages: write strategy: + max-parallel: 1 matrix: builder-profile: [local-docker] platform: [linux/amd64, linux/arm64] @@ -56,16 +57,15 @@ jobs: path: "~/.skaffold/cache" key: skaffold/${{ matrix.platform }}/prod-bases-${{ github.sha }} restore-keys: | - skaffold/${{ matrix.platform }}/prod-bases-${{ github.sha }} skaffold/${{ matrix.platform }}/prod-bases- - name: Build images working-directory: dockerfiles/bases run: | skaffold build \ + --build-concurrency 1 \ --cache-artifacts \ - --push=false \ + --default-repo ghcr.io/pingcap-qe/bases \ --platform ${{ matrix.platform }} \ --profile ${{ matrix.builder-profile }} \ - --default-repo ghcr.io/pingcap-qe/bases - + --push=false diff --git a/.github/workflows/release-cd-builder-images.yaml b/.github/workflows/release-cd-builder-images.yaml new file mode 100644 index 00000000..9c368e10 --- /dev/null +++ b/.github/workflows/release-cd-builder-images.yaml @@ -0,0 +1,74 @@ +name: Publish CD builder images +on: + workflow_dispatch: + push: + branches: + - main + paths: + - "dockerfiles/cd/**/Dockerfile" + - "dockerfiles/cd/**/*.Dockerfile" + - "dockerfiles/cd/skaffold.yaml" + +jobs: + skaffold: + name: publish images with skaffold + runs-on: ubuntu-latest + + permissions: + contents: read + packages: write + + strategy: + max-parallel: 1 + matrix: + module: [builder-go, builder-others] + go-profile: [go-1.21, go-1.20, go-1.19] + builder-profile: [local-docker] + exclude: + - module: builder-others + go-profile: go-1.20 + - module: builder-others + go-profile: go-1.19 + + steps: + - name: Checkout sources + uses: actions/checkout@v4 + + # https://github.com/docker/setup-qemu-action + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + # https://github.com/docker/setup-buildx-action + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup skaffold + run: | + curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v2.8.0/skaffold-linux-amd64 && \ + sudo install skaffold /usr/local/bin/ + + - name: Cache layers + uses: actions/cache@v3 + with: + path: "~/.skaffold/cache" + key: skaffold/cd/${{ matrix.module }}/${{ matrix.go-profile }}-${{ github.sha }} + restore-keys: | + skaffold/cd/${{ matrix.module }}/${{ matrix.go-profile }}- + skaffold/cd/${{ matrix.module }}/ + + - name: Publish images + working-directory: dockerfiles/cd + run: | + skaffold build \ + --build-concurrency 1 \ + --cache-artifacts \ + --default-repo ghcr.io/pingcap-qe/cd/builders \ + --module ${{ matrix.module }} \ + --profile ${{ matrix.go-profile }},${{ matrix.builder-profile }} diff --git a/.github/workflows/pull-ci-release-utils-images.yaml b/.github/workflows/release-ci-runtime-images.yaml similarity index 58% rename from .github/workflows/pull-ci-release-utils-images.yaml rename to .github/workflows/release-ci-runtime-images.yaml index c2654110..0d250214 100644 --- a/.github/workflows/pull-ci-release-utils-images.yaml +++ b/.github/workflows/release-ci-runtime-images.yaml @@ -1,20 +1,17 @@ -name: Pull test for CI utils images +name: Publish CI base images on: - pull_request: + workflow_dispatch: + push: branches: - main paths: - - "dockerfiles/ci/release-utils/**/Dockerfile" - - "dockerfiles/ci/release-utils/**/*.Dockerfile" + - "dockerfiles/ci/base/**/Dockerfile" + - "dockerfiles/ci/base/**/*.Dockerfile" - "dockerfiles/ci/skaffold.yaml" -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - jobs: skaffold: - name: build images with skaffold + name: publish images with skaffold runs-on: ubuntu-latest permissions: @@ -22,10 +19,16 @@ jobs: packages: write strategy: + max-parallel: 1 matrix: + module: [base, release-utils] builder-profile: [local-docker] - platform: [linux/amd64, linux/arm64] - + go-profile: [go-1.21, go-1.20, go-1.19] + exclude: + - module: release-utils + go-profile: go-1.20 + - module: release-utils + go-profile: go-1.19 steps: - name: Checkout sources uses: actions/checkout@v4 @@ -54,18 +57,18 @@ jobs: uses: actions/cache@v3 with: path: "~/.skaffold/cache" - key: skaffold/${{ matrix.platform }}/release-utils-${{ github.sha }} + key: skaffold/ci/${{ matrix.module }}/${{ matrix.go-profile }}-${{ github.sha }} restore-keys: | - skaffold/${{ matrix.platform }}/release-utils-${{ github.sha }} - skaffold/${{ matrix.platform }}/release-utils- + skaffold/ci/${{ matrix.module }}/${{ matrix.go-profile }}- + skaffold/ci/${{ matrix.module }}/ + skaffold/ci/ - - name: Build images + - name: Publish images working-directory: dockerfiles/ci run: | skaffold build \ + --build-concurrency 1 \ --cache-artifacts \ - --push=false \ - --platform ${{ matrix.platform }} \ - --module release-utils \ - --profile ${{ matrix.builder-profile }} \ - --default-repo ghcr.io/pingcap-qe/ci + --default-repo ghcr.io/pingcap-qe/ci \ + --module ${{ matrix.module }} \ + --profile ${{ matrix.go-profile }},${{ matrix.builder-profile }} diff --git a/.github/workflows/release-prod-runtime-images.yaml b/.github/workflows/release-prod-runtime-images.yaml new file mode 100644 index 00000000..9e6052b8 --- /dev/null +++ b/.github/workflows/release-prod-runtime-images.yaml @@ -0,0 +1,65 @@ +name: Release product base images +on: + workflow_dispatch: + push: + branches: + - main + paths: + - "dockerfiles/bases/**/Dockerfile" + - "dockerfiles/bases/**/*.Dockerfile" + - "dockerfiles/bases/skaffold.yaml" + +jobs: + skaffold: + name: publish images with skaffold + runs-on: ubuntu-latest + + permissions: + contents: read + packages: write + + strategy: + max-parallel: 1 + matrix: + builder-profile: [local-docker] + + steps: + - name: Checkout sources + uses: actions/checkout@v4 + + # https://github.com/docker/setup-qemu-action + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + # https://github.com/docker/setup-buildx-action + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup skaffold + run: | + curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v2.8.0/skaffold-linux-amd64 && \ + sudo install skaffold /usr/local/bin/ + + - name: Cache layers + uses: actions/cache@v3 + with: + path: "~/.skaffold/cache" + key: skaffold/prod-bases-${{ github.sha }} + restore-keys: | + skaffold/prod-bases- + + - name: Publish images + working-directory: dockerfiles/bases + run: | + skaffold build \ + --build-concurrency 1 \ + --cache-artifacts \ + --default-repo ghcr.io/pingcap-qe/bases \ + --profile ${{ matrix.builder-profile }} diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml deleted file mode 100644 index 967972ef..00000000 --- a/.github/workflows/release.yaml +++ /dev/null @@ -1,210 +0,0 @@ -name: Skaffold - release -on: - push: - branches: - - main - paths: - - "**/Dockerfile" - - "**/*.Dockerfile" - - "**/skaffold.yaml" - - .github/workflows/release.yml - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - # JOB to run change detection - dockerfiles-changes: - name: detect changes for Dockerfiles. - runs-on: ubuntu-latest - # Required permissions - permissions: - contents: read - outputs: - # Expose matched filters as job 'packages' output variable - packages-prod-bases: ${{ steps.filter-product-bases.outputs.changes }} - packages-ci-bases: ${{ steps.filter-ci-bases.outputs.changes }} - packages-ci-utils: ${{ steps.filter-ci-utils.outputs.changes }} - steps: - - uses: actions/checkout@v4 - # For pull requests it's not necessary to checkout the code - - uses: dorny/paths-filter@v2 - id: filter-product-bases - with: - filters: | - bases: dockerfiles/bases/** - - uses: dorny/paths-filter@v2 - id: filter-ci-bases - with: - filters: | - base: dockerfiles/ci/base/** - release-build-base: dockerfiles/ci/release-build-base/** - - uses: dorny/paths-filter@v2 - id: filter-ci-utils - with: - filters: | - release-utils: dockerfiles/ci/release-utils/** - - build-product-bases: - name: Skaffold release product base images - needs: dockerfiles-changes - runs-on: ubuntu-latest - - permissions: - contents: read - packages: write - - strategy: - matrix: - no-use: ${{ fromJSON(needs.dockerfiles-changes.outputs.packages-prod-bases) }} - builder-profile: [local-docker] - - steps: - - name: Checkout sources - uses: actions/checkout@v4 - - # https://github.com/docker/setup-qemu-action - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - # https://github.com/docker/setup-buildx-action - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to the Container registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Setup skaffold - run: | - curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v2.8.0/skaffold-linux-amd64 && \ - sudo install skaffold /usr/local/bin/ - - - name: Cache layers - uses: actions/cache@v3 - with: - path: "~/.skaffold/cache" - key: skaffold-${{ hashFiles('**/cache') }} - restore-keys: | - skaffold- - - - name: Build images - working-directory: dockerfiles/bases - run: | - skaffold build \ - --profile ${{ matrix.builder-profile }} \ - --default-repo ghcr.io/pingcap-qe/bases - - build-ci-bases: - name: Skaffold release CI base images - needs: dockerfiles-changes - runs-on: ubuntu-latest - - permissions: - contents: read - packages: write - - strategy: - matrix: - module: ${{ fromJSON(needs.dockerfiles-changes.outputs.packages-ci-bases) }} - go-profile: [go-1.21, go-1.20, go-1.19] - builder-profile: [local-docker] - - steps: - - name: Checkout sources - uses: actions/checkout@v4 - - # https://github.com/docker/setup-qemu-action - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - # https://github.com/docker/setup-buildx-action - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to the Container registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Setup skaffold - run: | - curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v2.8.0/skaffold-linux-amd64 && \ - sudo install skaffold /usr/local/bin/ - - - name: Cache layers - uses: actions/cache@v3 - with: - path: "~/.skaffold/cache" - key: skaffold-${{ hashFiles('**/cache') }} - restore-keys: | - skaffold- - - - name: Build images - working-directory: dockerfiles/ci - run: | - skaffold build \ - --module ${{ matrix.module }} \ - --profile ${{ matrix.go-profile }},${{ matrix.builder-profile }} \ - --default-repo ghcr.io/pingcap-qe/ci - - build-ci-utils: - name: Skaffold release CI util images - needs: dockerfiles-changes - runs-on: ubuntu-latest - - permissions: - contents: read - packages: write - - strategy: - matrix: - no-use: ${{ fromJSON(needs.dockerfiles-changes.outputs.packages-ci-utils) }} - builder-profile: [local-docker] - platform: [linux/amd64, linux/arm64] - - steps: - - name: Checkout sources - uses: actions/checkout@v4 - - # https://github.com/docker/setup-qemu-action - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - # https://github.com/docker/setup-buildx-action - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to the Container registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Setup skaffold - run: | - curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v2.8.0/skaffold-linux-amd64 && \ - sudo install skaffold /usr/local/bin/ - - - name: Cache layers - uses: actions/cache@v3 - with: - path: "~/.skaffold/cache" - key: skaffold-${{ hashFiles('**/cache') }} - restore-keys: | - skaffold- - - - name: Build images - working-directory: dockerfiles/ci - run: | - skaffold build \ - --module release-utils \ - --profile ${{ matrix.builder-profile }} \ - --default-repo ghcr.io/pingcap-qe/ci