name: mozhi pipeline
on: push
jobs:
  push_to_registry:
    runs-on: ubuntu-latest
    name: Push Docker image to Codeberg docker registry
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Install docker
        uses: papodaca/install-docker-action@main

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v2

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2

      - name: Login to Docker Hub
        uses: docker/login-action@v2
        with:
          username: aryak
          password: ${{ secrets.MOZHI_DOCKER_PASSWORD }}
          registry: codeberg.org

      - name: Build and push Docker image
        uses: docker/build-push-action@v4
        with:
          context: .
          file: ./Dockerfile
          push: true
          tags: codeberg.org/aryak/mozhi:latest
          platforms: linux/amd64, linux/arm64

  build_artifact:
    runs-on: ubuntu-latest
    name: Build and publish artifacts
    steps:
      - name: Check out the repo
        uses: actions/checkout@v3

      - name: Setup Go compiler
        uses: actions/setup-go@v4
        with:
          go-version: '1.21'

      - name: Build mozhi
        run: |
          export GOPRIVATE=codeberg.org/aryak/libmozhi
          go mod download
          go run github.com/swaggo/swag/cmd/swag@latest init --parseDependency
          GOOS=linux GOARCH=amd64 go build -o mozhi-linux-amd64
          GOOS=linux GOARCH=arm64 go build -o mozhi-linux-arm64
          GOOS=windows GOARCH=amd64 go build -o mozhi-windows-amd64.exe
          GOOS=windows GOARCH=arm64 go build -o mozhi-windows-arm64.exe
          GOOS=darwin GOARCH=amd64 go build -o mozhi-darwin-amd64
          GOOS=darwin GOARCH=arm64 go build -o mozhi-darwin-arm64
      - name: Archive production artifacts
        uses: actions/upload-artifact@v3
        with:
          name: mozhi-linux-amd64
          path: mozhi-linux-amd64
      - name: Archive production artifacts
        uses: actions/upload-artifact@v3
        with:
          name: mozhi-linux-arm64
          path: mozhi-linux-arm64

      - name: Archive production artifacts
        uses: actions/upload-artifact@v3
        with:
          name: mozhi-windows-amd64.exe
          path: mozhi-windows-amd64.exe
      - name: Archive production artifacts
        uses: actions/upload-artifact@v3
        with:
          name: mozhi-windows-arm64.exe
          path: mozhi-windows-arm64.exe

      - name: Archive production artifacts
        uses: actions/upload-artifact@v3
        with:
          name: mozhi-darwin-amd64
          path: mozhi-darwin-amd64
      - name: Archive production artifacts
        uses: actions/upload-artifact@v3
        with:
          name: mozhi-darwin-arm64
          path: mozhi-darwin-arm64
