Skip to content

Docker

Docker #484

Workflow file for this run

name: Docker
on:
workflow_call:
workflow_dispatch:
jobs:
docker:
runs-on: ubuntu-latest
timeout-minutes: 120
permissions:
packages: write
strategy:
matrix:
platform: [amd64, arm64]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to ghcr.io
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Cache flatpak build
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/.flatpak-builder
key: fb-${{ matrix.platform }}-${{ hashFiles('poetry.lock') }}
- name: Set up dependencies
run: |
sudo add-apt-repository ppa:flatpak/stable
- name: Build flatpak-builder-lint
run: |
cd docker
bash -x ./build.sh ${{ matrix.platform }}
- name: Build the image
uses: docker/build-push-action@v5
with:
context: docker
file: docker/Dockerfile
platforms: linux/${{ matrix.platform }}
push: false
provenance: false
load: true
tags: |
ghcr.io/${{ github.repository }}:${{ github.sha }}-${{ matrix.platform }}
ghcr.io/${{ github.repository }}:latest-${{ matrix.platform }}
labels: |
org.opencontainers.image.revision=${{ github.sha }}
org.opencontainers.image.source=ssh://[email protected]:${{ github.repository }}.git
org.opencontainers.image.url=https://github.com/${{ github.repository }}
- name: Run a sanity check
run: |
cd tests/repo/min_success_metadata/gui-app
dbus-run-session flatpak run org.flatpak.Builder --verbose --user --force-clean --repo=repo \
--mirror-screenshots-url=https://dl.flathub.org/media \
--install-deps-from=flathub --ccache builddir org.flathub.gui.yaml
mkdir -p builddir/files/share/app-info/media
ostree commit --repo=repo --canonical-permissions --branch=screenshots/$(uname -m) builddir/files/share/app-info/media
docker run -v $(pwd):/mnt --rm ghcr.io/${{ github.repository }}:latest-amd64 manifest /mnt/org.flathub.gui.yaml
docker run -v $(pwd):/mnt --rm ghcr.io/${{ github.repository }}:latest-amd64 repo /mnt/repo
- name: Push the image
uses: docker/build-push-action@v5
if: success() && github.event_name != 'pull_request'
with:
context: docker
file: docker/Dockerfile
platforms: linux/${{ matrix.platform }}
push: ${{ github.event_name != 'pull_request' }}
provenance: false
tags: |
ghcr.io/${{ github.repository }}:${{ github.sha }}-${{ matrix.platform }}
ghcr.io/${{ github.repository }}:latest-${{ matrix.platform }}
labels: |
org.opencontainers.image.revision=${{ github.sha }}
org.opencontainers.image.source=ssh://[email protected]:${{ github.repository }}.git
org.opencontainers.image.url=https://github.com/${{ github.repository }}
- name: Login to ghcr.io using Flathub credentials
uses: docker/login-action@v3
if: github.event_name != 'pull_request' && github.repository == 'flathub-infra/flatpak-builder-lint'
with:
registry: ghcr.io
username: ${{ secrets.FLATHUB_ORG_USER }}
password: ${{ secrets.FLATHUB_ORG_TOKEN }}
- name: Build and push Docker image to the old location
uses: docker/build-push-action@v5
if: success() && github.event_name != 'pull_request' && github.repository == 'flathub-infra/flatpak-builder-lint'
with:
context: docker
file: docker/Dockerfile
push: ${{ github.event_name != 'pull_request' }}
provenance: false
tags: |
ghcr.io/flathub/flatpak-builder-lint:${{ github.sha }}-${{ matrix.platform }}
ghcr.io/flathub/flatpak-builder-lint:latest-${{ matrix.platform }}
labels: |
org.opencontainers.image.revision=${{ github.sha }}
org.opencontainers.image.source=ssh://[email protected]:${{ github.repository }}.git
org.opencontainers.image.url=https://github.com/${{ github.repository }}
cache-from: type=gha
cache-to: type=gha,mode=max
docker-manifest:
if: ${{ github.event_name != 'pull_request' }}
runs-on: ubuntu-latest
timeout-minutes: 30
needs:
- docker
permissions:
packages: write
steps:
- name: Login to ghcr.io
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Create and push manifest
run: |
docker manifest create \
ghcr.io/${{ github.repository }}:${{ github.sha }} \
--amend ghcr.io/${{ github.repository }}:${{ github.sha }}-amd64 \
--amend ghcr.io/${{ github.repository }}:${{ github.sha }}-arm64
docker manifest push ghcr.io/${{ github.repository }}:${{ github.sha }}
docker manifest create \
ghcr.io/${{ github.repository }}:latest \
--amend ghcr.io/${{ github.repository }}:${{ github.sha }}-amd64 \
--amend ghcr.io/${{ github.repository }}:${{ github.sha }}-arm64
docker manifest push ghcr.io/${{ github.repository }}:latest
- name: Login to ghcr.io using Flathub credentials
uses: docker/login-action@v3
if: github.event_name != 'pull_request' && github.repository == 'flathub-infra/flatpak-builder-lint'
with:
registry: ghcr.io
username: ${{ secrets.FLATHUB_ORG_USER }}
password: ${{ secrets.FLATHUB_ORG_TOKEN }}
- name: Push manifest to the old location
if: github.event_name != 'pull_request' && github.repository == 'flathub-infra/flatpak-builder-lint'
run: |
docker manifest create \
ghcr.io/flathub/flatpak-builder-lint:${{ github.sha }} \
--amend ghcr.io/flathub-infra/flatpak-builder-lint:${{ github.sha }}-amd64 \
--amend ghcr.io/flathub-infra/flatpak-builder-lint:${{ github.sha }}-arm64
docker manifest push ghcr.io/flathub/flatpak-builder-lint:${{ github.sha }}
docker manifest create \
ghcr.io/flathub/flatpak-builder-lint:latest \
--amend ghcr.io/flathub-infra/flatpak-builder-lint:${{ github.sha }}-amd64 \
--amend ghcr.io/flathub-infra/flatpak-builder-lint:${{ github.sha }}-arm64
docker manifest push ghcr.io/flathub/flatpak-builder-lint:latest