204 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			204 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
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:
 | 
						|
    branches:
 | 
						|
      - 'master'
 | 
						|
    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
 | 
						|
    strategy:
 | 
						|
      fail-fast: false
 | 
						|
      matrix:
 | 
						|
        include:
 | 
						|
          -
 | 
						|
            name: Distribution
 | 
						|
            id: distribution
 | 
						|
            type: local
 | 
						|
          -
 | 
						|
            name: Docker Hub
 | 
						|
            registry: ''
 | 
						|
            slug: ghactionstest/ghactionstest
 | 
						|
            username_secret: DOCKERHUB_USERNAME
 | 
						|
            password_secret: DOCKERHUB_TOKEN
 | 
						|
            type: remote
 | 
						|
          -
 | 
						|
            name: GitHub
 | 
						|
            registry: ghcr.io
 | 
						|
            slug: ghcr.io/docker-ghactiontest/test
 | 
						|
            username_secret: GHCR_USERNAME
 | 
						|
            password_secret: GHCR_PAT
 | 
						|
            type: remote
 | 
						|
          -
 | 
						|
            name: GitLab
 | 
						|
            registry: registry.gitlab.com
 | 
						|
            slug: registry.gitlab.com/test1716/test
 | 
						|
            username_secret: GITLAB_USERNAME
 | 
						|
            password_secret: GITLAB_TOKEN
 | 
						|
            type: remote
 | 
						|
          -
 | 
						|
            name: AWS ECR
 | 
						|
            registry: 175142243308.dkr.ecr.us-east-2.amazonaws.com
 | 
						|
            slug: 175142243308.dkr.ecr.us-east-2.amazonaws.com/sandbox/test-docker-action
 | 
						|
            username_secret: AWS_ACCESS_KEY_ID
 | 
						|
            password_secret: AWS_SECRET_ACCESS_KEY
 | 
						|
            type: remote
 | 
						|
          -
 | 
						|
            name: AWS ECR Public
 | 
						|
            registry: public.ecr.aws
 | 
						|
            slug: public.ecr.aws/q3b5f1u4/test-docker-action
 | 
						|
            username_secret: AWS_ACCESS_KEY_ID
 | 
						|
            password_secret: AWS_SECRET_ACCESS_KEY
 | 
						|
            type: remote
 | 
						|
          -
 | 
						|
            name: Google Artifact Registry
 | 
						|
            registry: us-east4-docker.pkg.dev
 | 
						|
            slug: us-east4-docker.pkg.dev/sandbox-298914/docker-official-github-actions/test-docker-action
 | 
						|
            username_secret: GAR_USERNAME
 | 
						|
            password_secret: GAR_JSON_KEY
 | 
						|
            type: remote
 | 
						|
          -
 | 
						|
            name: Google Container Registry
 | 
						|
            registry: gcr.io
 | 
						|
            slug: gcr.io/sandbox-298914/test-docker-action
 | 
						|
            username_secret: GCR_USERNAME
 | 
						|
            password_secret: GCR_JSON_KEY
 | 
						|
            type: remote
 | 
						|
          -
 | 
						|
            name: Azure Container Registry
 | 
						|
            registry: officialgithubactions.azurecr.io
 | 
						|
            slug: officialgithubactions.azurecr.io/test-docker-action
 | 
						|
            username_secret: AZURE_CLIENT_ID
 | 
						|
            password_secret: AZURE_CLIENT_SECRET
 | 
						|
            type: remote
 | 
						|
          -
 | 
						|
            name: Quay
 | 
						|
            registry: quay.io
 | 
						|
            slug: quay.io/docker_build_team/ghactiontest
 | 
						|
            username_secret: QUAY_USERNAME
 | 
						|
            password_secret: QUAY_TOKEN
 | 
						|
            type: remote
 | 
						|
          -
 | 
						|
            name: Artifactory
 | 
						|
            registry: sforzando-build-team-local.jfrog.io
 | 
						|
            slug: sforzando-build-team-local.jfrog.io/build-push-action-e2e
 | 
						|
            username_secret: ARTIFACTORY_USERNAME
 | 
						|
            password_secret: ARTIFACTORY_TOKEN
 | 
						|
            type: remote
 | 
						|
          -
 | 
						|
            name: Harbor
 | 
						|
            id: harbor
 | 
						|
            type: local
 | 
						|
          -
 | 
						|
            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 .}}'
 |