diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 125e792..3b46acd 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -1,20 +1,15 @@ -name: Docker multi-arch build and push +name: Docker build and push on: push: - pull_request: - jobs: build: - name: Build Docker image (${{ matrix.arch }}) + name: Build Docker image runs-on: ubuntu-latest env: IMAGE_TAG: ghcr.io/${{ github.repository_owner }}/tdlightbotapi - IMAGE_TAG_DH: ${{ secrets.DOCKERHUB_OWNER }}/tdlightbotapi - strategy: - matrix: - arch: [linux/386, linux/amd64, linux/arm/v6, linux/arm/v7, linux/arm64, linux/ppc64le] + steps: - name: Checkout current repo @@ -29,16 +24,15 @@ jobs: # 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" == "master" ] && VERSION=latest - + # Convert IMAGE_TAG, HASH_VERSION and VERSION to lowercase (repository name must be lowercase) IMAGE_TAG=$(echo "$IMAGE_TAG" | awk '{print tolower($0)}') - IMAGE_TAG_DH=$(echo "$IMAGE_TAG_DH" | awk '{print tolower($0)}') HASH_VERSION=$(echo "$HASH_VERSION" | awk '{print tolower($0)}') VERSION=$(echo "$VERSION" | awk '{print tolower($0)}') ARCH=${{ matrix.arch }} @@ -46,7 +40,6 @@ jobs: # Store variable for future use echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV - echo "IMAGE_TAG_DH=$IMAGE_TAG_DH" >> $GITHUB_ENV echo "HASH_VERSION=$HASH_VERSION" >> $GITHUB_ENV echo "VERSION=$VERSION" >> $GITHUB_ENV echo "SAFE_ARCH=$SAFE_ARCH" >> $GITHUB_ENV @@ -59,167 +52,15 @@ jobs: # Save env to file cat $GITHUB_ENV > github.env - - name: Upload environment info as artifact - uses: actions/upload-artifact@v2 - with: - name: github_env - path: github.env - - - name: Set up QEMU - uses: docker/setup-qemu-action@v1 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - - name: Cache Docker layers - uses: actions/cache@v2 - with: - path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx-${{ env.SAFE_ARCH }}-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-buildx-${{ env.SAFE_ARCH }}- - - name: Login to ghcr registry uses: docker/login-action@v1 with: registry: ghcr.io - username: ${{ secrets.GH_USERNAME }} + username: ${{ github.actor }} password: ${{ secrets.GH_ACCESS_TOKEN }} - - name: Login to Docker Hub registry - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }} - - name: Build image - uses: docker/build-push-action@v2 - with: - context: . - file: ./Dockerfile - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,mode=max,dest=/tmp/.buildx-cache - platforms: ${{ matrix.arch }} - push: false - load: true - tags: | - tdlightbotapi:${{ env.HASH_VERSION }}-${{ env.SAFE_ARCH }} - - - name: Tag and push image + - name: Build and push image run: | - docker tag tdlightbotapi:${{ env.HASH_VERSION }}-${{ env.SAFE_ARCH }} ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-${{ env.SAFE_ARCH }} - docker tag tdlightbotapi:${{ env.HASH_VERSION }}-${{ env.SAFE_ARCH }} ${{ env.IMAGE_TAG }}:${{ env.VERSION }}-${{ env.SAFE_ARCH }} - docker tag tdlightbotapi:${{ env.HASH_VERSION }}-${{ env.SAFE_ARCH }} ${{ env.IMAGE_TAG_DH }}:${{ env.HASH_VERSION }}-${{ env.SAFE_ARCH }} - docker tag tdlightbotapi:${{ env.HASH_VERSION }}-${{ env.SAFE_ARCH }} ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-${{ env.SAFE_ARCH }} - docker push ${{ env.IMAGE_TAG}}:${{ env.HASH_VERSION}}-${{ env.SAFE_ARCH }} - docker push ${{ env.IMAGE_TAG }}:${{ env.VERSION }}-${{ env.SAFE_ARCH }} - docker push ${{ env.IMAGE_TAG_DH }}:${{ env.HASH_VERSION }}-${{ env.SAFE_ARCH }} - docker push ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-${{ env.SAFE_ARCH }} - - - name: Save image as tar archive - run: | - docker image ls # debug - docker save ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-${{ env.SAFE_ARCH }} -o ${{ env.SAFE_ARCH }}.tar - - - name: Upload image as artifact - uses: actions/upload-artifact@v2 - with: - name: image_${{ env.SAFE_ARCH }} - path: ${{ env.SAFE_ARCH }}.tar - - push-manifest: - name: Create and push multi-arch Docker manifest - runs-on: ubuntu-latest - env: - DOCKER_CLI_EXPERIMENTAL: enabled - needs: build - - steps: - - name: Download artifacts - uses: actions/download-artifact@v2 - - - name: Load environment info and built images - run: | - cat github_env/github.env > $GITHUB_ENV - docker load --input image_linux386/linux386.tar - docker load --input image_linuxamd64/linuxamd64.tar - docker load --input image_linuxarmv6/linuxarmv6.tar - docker load --input image_linuxarmv7/linuxarmv7.tar - docker load --input image_linuxarm64/linuxarm64.tar - docker load --input image_linuxppc64le/linuxppc64le.tar - - - name: Login to ghcr registry - uses: docker/login-action@v1 - with: - registry: ghcr.io - username: ${{ secrets.GH_USERNAME }} - password: ${{ secrets.GH_ACCESS_TOKEN }} - - - name: Login to Docker Hub registry - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }} - - - name: Create and push manifest - run: | - # -- Push to ghcr.io - docker manifest create ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }} \ - --amend ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linux386 \ - --amend ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxamd64 \ - --amend ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxarmv6 \ - --amend ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxarmv7 \ - --amend ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxarm64 \ - --amend ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxppc64le - docker manifest push ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }} - - # Tag images as VERSION (like 'latest') - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linux386 ${{ env.IMAGE_TAG }}:${{ env.VERSION }}-linux386 - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxamd64 ${{ env.IMAGE_TAG }}:${{ env.VERSION }}-linuxamd64 - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxarmv6 ${{ env.IMAGE_TAG }}:${{ env.VERSION }}-linuxarmv6 - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxarmv7 ${{ env.IMAGE_TAG }}:${{ env.VERSION }}-linuxarmv7 - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxarm64 ${{ env.IMAGE_TAG }}:${{ env.VERSION }}-linuxarm64 - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxppc64le ${{ env.IMAGE_TAG }}:${{ env.VERSION }}-linuxppc64le - - docker manifest create ${{ env.IMAGE_TAG }}:${{ env.VERSION }} \ - --amend ${{ env.IMAGE_TAG }}:${{ env.VERSION }}-linux386 \ - --amend ${{ env.IMAGE_TAG }}:${{ env.VERSION }}-linuxamd64 \ - --amend ${{ env.IMAGE_TAG }}:${{ env.VERSION }}-linuxarmv6 \ - --amend ${{ env.IMAGE_TAG }}:${{ env.VERSION }}-linuxarmv7 \ - --amend ${{ env.IMAGE_TAG }}:${{ env.VERSION }}-linuxarm64 \ - --amend ${{ env.IMAGE_TAG }}:${{ env.VERSION }}-linuxppc64le - docker manifest push ${{ env.IMAGE_TAG }}:${{ env.VERSION }} - - # -- Push to Docker Hub - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linux386 ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linux386 - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxamd64 ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linuxamd64 - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxarmv6 ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linuxarmv6 - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxarmv7 ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linuxarmv7 - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxarm64 ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linuxarm64 - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxppc64le ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linuxppc64le - - docker manifest create ${{ env.IMAGE_TAG_DH }}:${{ env.HASH_VERSION }} \ - --amend ${{ env.IMAGE_TAG_DH }}:${{ env.HASH_VERSION }}-linux386 \ - --amend ${{ env.IMAGE_TAG_DH }}:${{ env.HASH_VERSION }}-linuxamd64 \ - --amend ${{ env.IMAGE_TAG_DH }}:${{ env.HASH_VERSION }}-linuxarmv6 \ - --amend ${{ env.IMAGE_TAG_DH }}:${{ env.HASH_VERSION }}-linuxarmv7 \ - --amend ${{ env.IMAGE_TAG_DH }}:${{ env.HASH_VERSION }}-linuxarm64 \ - --amend ${{ env.IMAGE_TAG_DH }}:${{ env.HASH_VERSION }}-linuxppc64le - docker manifest push ${{ env.IMAGE_TAG_DH }}:${{ env.HASH_VERSION }} - - # Tag images as VERSION (like 'latest') - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linux386 ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linux386 - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxamd64 ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linuxamd64 - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxarmv6 ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linuxarmv6 - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxarmv7 ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linuxarmv7 - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxarm64 ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linuxarm64 - docker tag ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}-linuxppc64le ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linuxppc64le - - docker manifest create ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }} \ - --amend ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linux386 \ - --amend ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linuxamd64 \ - --amend ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linuxarmv6 \ - --amend ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linuxarmv7 \ - --amend ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linuxarm64 \ - --amend ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }}-linuxppc64le - docker manifest push ${{ env.IMAGE_TAG_DH }}:${{ env.VERSION }} + docker build . -t ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }} + docker push ${{ env.IMAGE_TAG }}:${{ env.HASH_VERSION }}