diff --git a/.github/workflows/.e2e-run.yml b/.github/workflows/.e2e-run.yml new file mode 100644 index 0000000..1c324b6 --- /dev/null +++ b/.github/workflows/.e2e-run.yml @@ -0,0 +1,127 @@ +# 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 + secrets: + username: + required: false + password: + required: false + +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: + buildx_version: + - latest + - https://github.com/docker/buildx.git#master + buildkit_image: + - moby/buildkit:buildx-stable-1 + - 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: ${{ inputs.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 || matrix.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 || matrix.buildkit_image }} + network=host + - + name: Login to Registry + if: github.event_name != 'pull_request' && secrets.username != '' + uses: docker/login-action@v2 + with: + registry: ${{ inputs.registry }} + username: ${{ secrets.username }} + password: ${{ secrets.password }} + - + 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=${{ inputs.slug }}:master + cache-to: type=inline + - + name: Inspect image + run: | + docker pull ${{ inputs.slug }}:${{ steps.meta.outputs.version }} + docker image inspect ${{ inputs.slug }}:${{ steps.meta.outputs.version }} + - + name: Check manifest + run: | + docker buildx imagetools inspect ${{ inputs.slug }}:${{ steps.meta.outputs.version }} --format '{{json .}}' diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 7552e9b..60f5182 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -22,13 +22,6 @@ 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 @@ -119,85 +112,18 @@ jobs: 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 + uses: ./.github/workflows/.e2e-run.yml with: + id: ${{ matrix.id }} + type: ${{ matrix.type }} + name: ${{ matrix.name }} registry: ${{ env.REGISTRY_FQDN || matrix.registry }} + slug: ${{ env.REGISTRY_SLUG || matrix.slug }} 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 .}}'