on: [push, pull_request]
jobs:
  mirror:
    runs-on: bookworm
    if: github.event_name == 'push' && github.repository == 'forgejo-contrib/forgejo-deb'
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: "mirror repo: code.forgejo.org"
        env:
          FORGEJO_DEST: code.forgejo.org
          FORGEJO_KEY: ${{ secrets.cfo_api_key }}
        run: ./.action-forgejo-mirror.sh

  build-forgejo-deb:
    runs-on: bullseye
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: true
          fetch-depth: 0
          fetch-tags: true
          filter: tree:0

      - uses: actions/setup-node@v3
        with:
          node-version: 20

      - uses: actions/setup-go@v4
        with:
          go-version: "1.22"
          check-latest: true

      - name: "actions prep: build-forgejo-deb"
        id: ciprep
        run: ./.ci-make.sh actions-prep build-forgejo-deb

      - uses: crystal/install-jq-action@v2.1.0
      - run: ./.ci-make.sh ci-verify forgejo

      - run: ./.ci-make.sh submodule-make forgejo deps-frontend
      - run: ./.ci-make.sh submodule-make forgejo deps-backend

      - name: tag pre-condition
        run: |
          cd forgejo
          git update-ref refs/heads/tag_test $(git rev-parse --verify HEAD)

      # - run: ./.ci-make.sh submodule-make forgejo security-check
      
      - run: ./.ci-make.sh submodule-make forgejo frontend

      # - run: ./.ci-make.sh submodule-make forgejo checks-backend

      - name: Download Forgejo binary
        run: ./.ci-make.sh download-binary forgejo-bin-dl

      - name: Build Forgejo for arm64
        run: ./.ci-make.sh submodule-build forgejo forgejo-bin
        env:
          GOARCH: arm64

      - name: Build Forgejo (with SQLite) for arm64
        run: ./.ci-make.sh submodule-build forgejo forgejo-sqlite-bin
        env:
          GOARCH: arm64
          TAGS: sqlite sqlite_unlock_notify

      - run: ./.ci-make.sh package-prep
      - run: ./.ci-make.sh package-build-deps

      - run: ./.ci-make.sh package-build actions

      - run: ./.ci-make.sh package-clean

      - name: build repo package
        run: |
          cd repo-deb
          ./build.sh actions

      - name: generate sha256
        run: |
          ./.ci-make.sh pkg-gen-sha256
          ./.ci-make.sh preview-sha256

      - run: ./.ci-make.sh install-run-test ./forgejo-sqlite_*_arm64.deb

      - uses: actions/upload-artifact@v3
        with:
          name: forgejo-deb-${{ steps.ciprep.outputs.artifactlabel }}
          path: |
            *.deb
            *.deb.sha256
            repo-deb/*.deb

  multitest-bullseye-docker:
    runs-on: bullseye
    needs: [build-forgejo-deb]
    steps:
      - uses: actions/checkout@v4

      - name: "actions prep: installtest"
        id: ciprep
        run: ./.ci-make.sh actions-prep installtest

      - uses: actions/download-artifact@v3
        with:
          name: forgejo-deb-${{steps.ciprep.outputs.artifactlabel }}

      - run: ./.ci-make.sh install-run-test ./forgejo-sqlite_*_arm64.deb
      - run: ./.ci-make.sh force-clean-forgejo
      - run: ./.ci-make.sh full-instance-clean
      - run: ./.ci-make.sh install-run-test ./forgejo_*_arm64.deb
      - run: ./.ci-make.sh force-clean-forgejo
      - run: ./.ci-make.sh full-instance-clean
      - run: ./.ci-make.sh install-run-test ./forgejo-bin_*_arm64.deb
      - run: ./.ci-make.sh force-clean-forgejo
      - run: ./.ci-make.sh full-instance-clean

  publish:
    runs-on: bookworm
    steps:
      - uses: actions/checkout@v4

      - name: actions prep
        id: ciprep
        run: ./.ci-make.sh actions-prep

      - uses: actions/download-artifact@v3
        with:
          name: forgejo-deb-${{ steps.ciprep.outputs.artifactlabel }}

      - uses: crystal/install-jq-action@v2.1.0
      - run: mkdir forgejo-release
      - run: mv *.deb *.deb.sha256 forgejo-release/

      - name: Debian package registry publish
        env:
          FORGEJO_SITE: https://git.alexjanka.com
          FORGEJO_OWNER: alex
          DEBIAN_DIST: testing
          DEBIAN_COMPONENT: main
          FORGEJO_KEY: ${{ secrets.cfo_api_key }}
        run: |
          cd forgejo-release
          ../.ci-forgejo-apt.sh *.deb
          cd ..