# This pipeline aims at building Glances Docker images name: build_docker env: DEFAULT_DOCKER_IMAGE: nicolargo/glances PUSH_BRANCH: ${{ 'refs/heads/develop' == github.ref || startsWith(github.ref, 'refs/tags/v') }} # Alpine image platform: https://hub.docker.com/_/alpine # linux/arm/v6,linux/arm/v7 do not work (timeout during the build) DOCKER_PLATFORMS: linux/amd64,linux/arm64/v8 # Ubuntu image platforms list: https://hub.docker.com/_/ubuntu # linux/arm/v7 do not work (Cargo/Rust not available) DOCKER_PLATFORMS_UBUNTU: linux/amd64,linux/arm64/v8 on: workflow_call: secrets: DOCKER_USERNAME: description: 'Docker Hub username' required: true DOCKER_TOKEN: description: 'Docker Hub token' required: true jobs: create_docker_images_list: runs-on: ubuntu-latest outputs: tags: ${{ steps.config.outputs.tags }} steps: - name: Determine image tags id: config shell: bash run: | if [[ $GITHUB_REF == refs/tags/* ]]; then VERSION=${GITHUB_REF#refs/tags/v} TAG_ARRAY="[{ \"target\": \"minimal\", \"tag\": \"${VERSION}\" }," TAG_ARRAY="$TAG_ARRAY { \"target\": \"minimal\", \"tag\": \"latest\" }," TAG_ARRAY="$TAG_ARRAY { \"target\": \"full\", \"tag\": \"${VERSION}-full\" }," TAG_ARRAY="$TAG_ARRAY { \"target\": \"full\", \"tag\": \"latest-full\" }]" elif [[ $GITHUB_REF == refs/heads/develop ]]; then TAG_ARRAY="[{ \"target\": \"dev\", \"tag\": \"dev\" }]" else TAG_ARRAY="[]" fi echo "Tags to build: $TAG_ARRAY" echo "tags=$TAG_ARRAY" >> $GITHUB_OUTPUT build_docker_images: runs-on: ubuntu-latest needs: - create_docker_images_list strategy: fail-fast: false matrix: os: ['alpine', 'ubuntu'] tag: ${{ fromJson(needs.create_docker_images_list.outputs.tags) }} steps: - name: Checkout uses: actions/checkout@v5 - name: Retrieve Repository Docker metadata id: docker_meta uses: docker/metadata-action@v5 with: images: ${{ env.DEFAULT_DOCKER_IMAGE }} labels: | org.opencontainers.image.url=https://nicolargo.github.io/glances/ - name: Set up QEMU uses: docker/setup-qemu-action@v3 with: platforms: all - name: Set up Docker Buildx id: buildx uses: docker/setup-buildx-action@v3 with: version: latest - name: Login to DockerHub uses: docker/login-action@v3 if: ${{ env.PUSH_BRANCH == 'true' }} with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_TOKEN }} - name: Build and push image uses: docker/build-push-action@v6 with: push: ${{ env.PUSH_BRANCH == 'true' }} tags: "${{ env.DEFAULT_DOCKER_IMAGE }}:${{ matrix.os != 'alpine' && format('{0}-', matrix.os) || '' }}${{ matrix.tag.tag }}" build-args: | CHANGING_ARG=${{ github.sha }} context: . file: "docker-files/${{ matrix.os }}.Dockerfile" platforms: ${{ matrix.os != 'ubuntu' && env.DOCKER_PLATFORMS || env.DOCKER_PLATFORMS_UBUNTU }} target: ${{ matrix.tag.target }} labels: ${{ steps.docker_meta.outputs.labels }} # GHA default behaviour overwrites last build cache. Causes alpine and ubuntu cache to overwrite each other. # Use `scope` with the os name to prevent that cache-from: 'type=gha,scope=${{ matrix.os }}' cache-to: 'type=gha,mode=max,scope=${{ matrix.os }}'