From aca01f02d5f0a32d2dcd2d16b96f9468577d5149 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Wed, 9 Aug 2023 12:31:24 +0200 Subject: [PATCH] e2e: test buildx and buildkit edge Signed-off-by: CrazyMax --- .github/workflows/.e2e-run.yml | 129 +++++++++++++++++++++++++++++++++ .github/workflows/e2e.yml | 113 +++-------------------------- 2 files changed, 139 insertions(+), 103 deletions(-) create mode 100644 .github/workflows/.e2e-run.yml diff --git a/.github/workflows/.e2e-run.yml b/.github/workflows/.e2e-run.yml new file mode 100644 index 0000000..19a281c --- /dev/null +++ b/.github/workflows/.e2e-run.yml @@ -0,0 +1,129 @@ +# reusable workflow +name: .e2e-run + +on: + workflow_call: + inputs: + id: + required: false + type: string + type: + required: true + type: string + name: + required: true + type: string + registry: + required: false + type: string + slug: + required: false + type: string + username_secret: + required: false + type: string + password_secret: + required: false + type: string + +env: + HARBOR_VERSION: v2.7.0 + NEXUS_VERSION: 3.47.1 + DISTRIBUTION_VERSION: 2.8.1 + +jobs: + run: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - + buildx_version: latest + buildkit_image: moby/buildkit:buildx-stable-1 + - + buildx_version: https://github.com/docker/buildx.git#master + buildkit_image: moby/buildkit:master + steps: + - + name: Checkout + uses: actions/checkout@v3 + - + name: Set up env + if: inputs.type == 'local' + run: | + cat ./.github/e2e/${{ inputs.id }}/env >> $GITHUB_ENV + - + name: Set up BuildKit config + run: | + touch /tmp/buildkitd.toml + if [ "${{ inputs.type }}" = "local" ]; then + echo -e "[registry.\"${{ env.REGISTRY_FQDN }}\"]\nhttp = true\ninsecure = true" > /tmp/buildkitd.toml + fi + - + name: Set up Docker daemon + if: inputs.type == 'local' + run: | + if [ ! -e /etc/docker/daemon.json ]; then + echo '{}' | tee /etc/docker/daemon.json >/dev/null + fi + DOCKERD_CONFIG=$(jq '.+{"insecure-registries":["http://${{ env.REGISTRY_FQDN }}"]}' /etc/docker/daemon.json) + sudo tee /etc/docker/daemon.json <<<"$DOCKERD_CONFIG" >/dev/null + sudo service docker restart + - + name: Install ${{ inputs.name }} + if: inputs.type == 'local' + run: | + sudo -E bash ./.github/e2e/${{ inputs.id }}/install.sh + - + name: Docker meta + id: meta + uses: docker/metadata-action@v4 + with: + images: ${{ env.REGISTRY_SLUG || inputs.slug }} + tags: | + type=ref,event=branch,enable=${{ matrix.buildx_version == 'latest' && matrix.buildkit_image == 'moby/buildkit:buildx-stable-1' }} + type=ref,event=tag,enable=${{ matrix.buildx_version == 'latest' && matrix.buildkit_image == 'moby/buildkit:buildx-stable-1' }} + type=raw,gh-runid-${{ github.run_id }} + - + name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + with: + version: ${{ matrix.buildx_version }} + config: /tmp/buildkitd.toml + buildkitd-flags: --debug --allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host + driver-opts: | + image=${{ matrix.buildkit_image }} + network=host + - + name: Login to Registry + if: github.event_name != 'pull_request' && (env.REGISTRY_USER || inputs.username_secret) != '' + uses: docker/login-action@v2 + with: + registry: ${{ env.REGISTRY_FQDN || inputs.registry }} + username: ${{ env.REGISTRY_USER || secrets[inputs.username_secret] }} + password: ${{ env.REGISTRY_PASSWORD || secrets[inputs.password_secret] }} + - + name: Build and push + uses: ./ + with: + context: ./test + file: ./test/multi.Dockerfile + platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=registry,ref=${{ env.REGISTRY_SLUG || inputs.slug }}:master + cache-to: type=inline + - + name: Inspect image + run: | + docker pull ${{ env.REGISTRY_SLUG || inputs.slug }}:${{ steps.meta.outputs.version }} + docker image inspect ${{ env.REGISTRY_SLUG || inputs.slug }}:${{ steps.meta.outputs.version }} + - + name: Check manifest + run: | + docker buildx imagetools inspect ${{ env.REGISTRY_SLUG || inputs.slug }}:${{ steps.meta.outputs.version }} --format '{{json .}}' diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 7552e9b..828257f 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -2,18 +2,6 @@ name: e2e on: workflow_dispatch: - inputs: - buildx-version: - description: 'Buildx version or Git context' - default: 'latest' - required: false - buildkit-image: - description: 'BuildKit image' - default: 'moby/buildkit:buildx-stable-1' - required: false - tag: - description: 'Additional tag to push' - required: false schedule: - cron: '0 10 * * *' push: @@ -22,16 +10,9 @@ on: tags: - 'v*' -env: - BUILDX_VERSION: latest - BUILDKIT_IMAGE: moby/buildkit:buildx-stable-1 - HARBOR_VERSION: v2.7.0 - NEXUS_VERSION: 3.47.1 - DISTRIBUTION_VERSION: 2.8.1 - jobs: build: - runs-on: ubuntu-latest + uses: ./.github/workflows/.e2e-run.yml strategy: fail-fast: false matrix: @@ -118,86 +99,12 @@ jobs: name: Nexus id: nexus type: local - steps: - - - name: Checkout - uses: actions/checkout@v3 - - - name: Set up env - if: matrix.type == 'local' - run: | - cat ./.github/e2e/${{ matrix.id }}/env >> $GITHUB_ENV - - - name: Set up BuildKit config - run: | - touch /tmp/buildkitd.toml - if [ "${{ matrix.type }}" = "local" ]; then - echo -e "[registry.\"${{ env.REGISTRY_FQDN }}\"]\nhttp = true\ninsecure = true" > /tmp/buildkitd.toml - fi - - - name: Set up Docker daemon - if: matrix.type == 'local' - run: | - if [ ! -e /etc/docker/daemon.json ]; then - echo '{}' | tee /etc/docker/daemon.json >/dev/null - fi - DOCKERD_CONFIG=$(jq '.+{"insecure-registries":["http://${{ env.REGISTRY_FQDN }}"]}' /etc/docker/daemon.json) - sudo tee /etc/docker/daemon.json <<<"$DOCKERD_CONFIG" >/dev/null - sudo service docker restart - - - name: Install ${{ matrix.name }} - if: matrix.type == 'local' - run: | - sudo -E bash ./.github/e2e/${{ matrix.id }}/install.sh - - - name: Docker meta - id: meta - uses: docker/metadata-action@v4 - with: - images: ${{ env.REGISTRY_SLUG || matrix.slug }} - tags: | - type=ref,event=branch - type=ref,event=tag - type=raw,value=${{ inputs.tag }},enable=${{ inputs.tag != '' }} - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - with: - version: ${{ inputs.buildx-version || env.BUILDX_VERSION }} - config: /tmp/buildkitd.toml - buildkitd-flags: --debug --allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host - driver-opts: | - image=${{ inputs.buildkit-image || env.BUILDKIT_IMAGE }} - network=host - - - name: Login to Registry - if: github.event_name != 'pull_request' && (env.REGISTRY_USER || matrix.username_secret) != '' - uses: docker/login-action@v2 - with: - registry: ${{ env.REGISTRY_FQDN || matrix.registry }} - username: ${{ env.REGISTRY_USER || secrets[matrix.username_secret] }} - password: ${{ env.REGISTRY_PASSWORD || secrets[matrix.password_secret] }} - - - name: Build and push - uses: ./ - with: - context: ./test - file: ./test/multi.Dockerfile - platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x - push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - cache-from: type=registry,ref=${{ env.REGISTRY_SLUG || matrix.slug }}:master - cache-to: type=inline - - - name: Inspect image - run: | - docker pull ${{ env.REGISTRY_SLUG || matrix.slug }}:${{ steps.meta.outputs.version }} - docker image inspect ${{ env.REGISTRY_SLUG || matrix.slug }}:${{ steps.meta.outputs.version }} - - - name: Check manifest - run: | - docker buildx imagetools inspect ${{ env.REGISTRY_SLUG || matrix.slug }}:${{ steps.meta.outputs.version }} --format '{{json .}}' + with: + id: ${{ matrix.id }} + type: ${{ matrix.type }} + name: ${{ matrix.name }} + registry: ${{ matrix.registry }} + slug: ${{ matrix.slug }} + username_secret: ${{ matrix.username_secret }} + password_secret: ${{ matrix.password_secret }} + secrets: inherit