name: Pull Request

on:
  pull_request:
    types: [labeled, opened, synchronize, reopened]

concurrency:
  group: pull-requests-${{ github.workflow }}-${{ github.event.pull_request.number }}
  cancel-in-progress: true

jobs:
  build:
    name: Build
    runs-on: [self-hosted]
    permissions:
      contents: read
      packages: write

    # Never run when the PR carries the "release" label.
    if: |
      !contains(github.event.pull_request.labels.*.name, 'release')

    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          fetch-tags: true

      - name: Login to GitHub Container Registry
        uses: docker/login-action@v3
        with:
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}
          registry: ghcr.io
        env:
          DOCKER_CONFIG: ${{ runner.temp }}/.docker

      - name: Build
        run: make build
        env:
          DOCKER_CONFIG: ${{ runner.temp }}/.docker

      - name: Build Talos image
        run: make -C packages/core/installer talos-nocloud
     
      - name: Upload installer
        uses: actions/upload-artifact@v4
        with:
          name: cozystack-installer
          path: _out/assets/cozystack-installer.yaml

      - name: Upload Talos image
        uses: actions/upload-artifact@v4
        with:
          name: talos-image
          path: _out/assets/nocloud-amd64.raw.xz
 
  test:
    name: Test
    runs-on: [self-hosted]
    needs: build

    # Never run when the PR carries the "release" label.
    if: |
      !contains(github.event.pull_request.labels.*.name, 'release')

    steps:
      - name: Download installer
        uses: actions/download-artifact@v4
        with:
          name: cozystack-installer
          path: _out/assets/

      - name: Download Talos image
        uses: actions/download-artifact@v4
        with:
          name: talos-image
          path: _out/assets/

      - name: Test
        run: make test
