name: Test Infinito.Nexus Deploy (server) on: workflow_call: inputs: distros: description: "Space-separated distro list" required: true type: string whitelist: description: "Optional space-separated whitelist of app ids" required: false type: string default: "" permissions: contents: read packages: read env: TEST_DEPLOY_TYPE: server DISTROS: ${{ inputs.distros }} NIX_CONFIG: | access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} INFINITO_IMAGE_TAG: ci-${{ github.sha }} INFINITO_GHCR_MIRROR_PREFIX: mirror jobs: discover: name: 🌐 Discover apps runs-on: ubuntu-latest timeout-minutes: 60 outputs: apps: ${{ steps.discover.outputs.apps }} steps: - uses: actions/checkout@v6 - name: Resolve repository owner shell: bash run: | set -euo pipefail echo "GITHUB_REPOSITORY_OWNER=$(scripts/meta/resolve/repository/owner.sh)" >> "$GITHUB_ENV" - name: Install jq shell: bash run: ./scripts/install/apt.sh jq - name: Install deps (jq + envsubst) shell: bash run: ./scripts/install/apt.sh jq gettext-base - name: Start stack for discovery shell: bash run: | set -euo pipefail make up - name: Discover apps id: discover shell: bash env: WHITELIST: ${{ inputs.whitelist }} run: | set -euo pipefail apps="$(./scripts/meta/resolve/apps.sh)" [[ -n "$apps" ]] || apps='[]' echo "apps=$apps" >> "$GITHUB_OUTPUT" echo "apps_json=$apps" >> "$GITHUB_OUTPUT" echo "apps_json=$apps" server: name: 🌐 Deploy ${{ matrix.apps }} if: needs.discover.outputs.apps != '' && needs.discover.outputs.apps != '[]' runs-on: ubuntu-latest timeout-minutes: 360 needs: discover strategy: fail-fast: false matrix: apps: ${{ fromJson(needs.discover.outputs.apps) }} steps: - uses: actions/checkout@v6 - name: Resolve repository owner shell: bash run: | set -euo pipefail echo "GITHUB_REPOSITORY_OWNER=$(scripts/meta/resolve/repository/owner.sh)" >> "$GITHUB_ENV" - name: Install jq shell: bash run: ./scripts/install/apt.sh jq - name: Deploy app shell: bash env: APPS: ${{ matrix.apps }} run: ./scripts/tests/deploy/ci/all.sh - name: Upload Playwright artifacts if: always() uses: actions/upload-artifact@v7 with: name: playwright-server-${{ matrix.apps }} path: /tmp/playwright-artifacts/ if-no-files-found: ignore