--- name: Container # yamllint disable-line rule:truthy on: workflow_dispatch: workflow_run: workflows: - Integration types: - completed branches: - master concurrency: group: ${{ github.workflow }} cancel-in-progress: false permissions: contents: read packages: read env: PYTHON_VERSION: "3.14" jobs: build: if: | github.event_name == 'workflow_dispatch' || (github.repository_owner == 'searxng' && github.event.workflow_run.conclusion == 'success') name: Build (${{ matrix.arch }}) runs-on: ${{ matrix.runner }} strategy: fail-fast: false matrix: include: - runner: ubuntu-26.04 arch: amd64 - runner: ubuntu-26.04-arm arch: arm64 - runner: ubuntu-26.04-arm arch: armv7 permissions: packages: write outputs: docker_tag: ${{ steps.build.outputs.docker_tag }} git_url: ${{ steps.build.outputs.git_url }} steps: - name: Login to GHCR uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 with: registry: "ghcr.io" username: "${{ github.repository_owner }}" password: "${{ secrets.GITHUB_TOKEN }}" - name: Setup Python uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 with: python-version: "${{ env.PYTHON_VERSION }}" - name: Setup QEMU uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 - name: Checkout uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: "${{ github.event.workflow_run.head_sha || github.sha }}" persist-credentials: "false" fetch-depth: "0" - name: Setup cache Python uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: "python-${{ env.PYTHON_VERSION }}-${{ runner.arch }}-${{ hashFiles('./requirements*.txt') }}" restore-keys: | python-${{ env.PYTHON_VERSION }}-${{ runner.arch }}- path: "./local/" - name: Setup cache container uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: "container-${{ matrix.arch }}-${{ hashFiles('./requirements*.txt') }}" restore-keys: | container-${{ matrix.arch }}- path: "/var/tmp/buildah-cache-*/*" - name: Build id: build env: OVERRIDE_ARCH: "${{ matrix.arch }}" run: make container.build test: name: Test (${{ matrix.arch }}) runs-on: ${{ matrix.runner }} needs: build strategy: fail-fast: false matrix: include: - runner: ubuntu-26.04 arch: amd64 - runner: ubuntu-26.04-arm arch: arm64 - runner: ubuntu-26.04-arm arch: armv7 steps: - name: Login to GHCR uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 with: registry: "ghcr.io" username: "${{ github.repository_owner }}" password: "${{ secrets.GITHUB_TOKEN }}" - name: Setup QEMU uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 - name: Checkout uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: "${{ github.event.workflow_run.head_sha || github.sha }}" persist-credentials: "false" - name: Test env: OVERRIDE_ARCH: "${{ matrix.arch }}" GIT_URL: "${{ needs.build.outputs.git_url }}" run: make container.test release: if: github.repository_owner == 'searxng' && github.ref_name == 'master' name: Release runs-on: ubuntu-26.04-arm needs: - build - test permissions: packages: write steps: - name: Login to Docker Hub uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 with: registry: "docker.io" username: "${{ secrets.DOCKER_USER }}" password: "${{ secrets.DOCKER_TOKEN }}" - name: Login to GHCR uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 with: registry: "ghcr.io" username: "${{ github.repository_owner }}" password: "${{ secrets.GITHUB_TOKEN }}" - name: Checkout uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: "${{ github.event.workflow_run.head_sha || github.sha }}" persist-credentials: "false" - name: Release env: GIT_URL: "${{ needs.build.outputs.git_url }}" DOCKER_TAG: "${{ needs.build.outputs.docker_tag }}" run: make container.push