name: Build and Release

on:
  push:
    tags:
      - 'v*.*.*'  # 当推送带有版本号的 tag（例如 v1.0.0）时触发工作流
#on:
#  push:
#    branches: [ "master" ]
#  pull_request:
#    branches: [ "master" ]

jobs:
  build:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        goos: [ linux, windows ] # 指定要构建的操作系统
        goarch: [ amd64 ]         # 指定架构

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Go environment
        uses: actions/setup-go@v4
        with:
          go-version: '1.22'  # 选择 Go 版本

      - name: Set up npm
        uses: actions/setup-node@v2
        with:
          node-version: '20'

      - name: install gcc zip musl
        run: |
          if [ "${{ matrix.goos }}" = "windows" ]; then
            sudo apt-get install gcc-mingw-w64-x86-64 zip -y
          else
            sudo apt-get install musl musl-dev musl-tools -y
          fi


      - name: build rustdesk-api-web
        run: |
          git clone https://github.com/lejianwen/rustdesk-api-web
          cd rustdesk-api-web
          npm install
          npm run build
          mkdir ../resources/admin/ -p
          cp -ar dist/* ../resources/admin/

      - name: tidy
        run: go mod tidy


      - name: swag
        run: |
          go install github.com/swaggo/swag/cmd/swag@latest
          swag init -g cmd/apimain.go --output docs/api --instanceName api --exclude http/controller/admin
          swag init -g cmd/apimain.go --output docs/admin --instanceName admin --exclude http/controller/api

      - name: Build for ${{ matrix.goos }}-${{ matrix.goarch }}
        run: |
          mkdir release -p
          cp -ar resources release/
          cp -ar docs release/
          cp -ar conf release/
          mkdir -p release/data
          mkdir -p release/runtime
          if [ "${{ matrix.goos }}" = "windows" ]; then
            GOOS=${{ matrix.goos }} GOARCH=${{ matrix.goarch }} CC=x86_64-w64-mingw32-gcc CGO_LDFLAGS="-static" CGO_ENABLED=1 go build -ldflags "-s -w" -o ./release/apimain.exe ./cmd/apimain.go
            zip -r ${{ matrix.goos}}-${{ matrix.goarch }}.zip ./release
          else
            GOOS=${{ matrix.goos }} GOARCH=${{ matrix.goarch }} CC=musl-gcc CGO_LDFLAGS="-static" CGO_ENABLED=1 go build -ldflags "-s -w" -o ./release/apimain ./cmd/apimain.go
            tar -czf ${{ matrix.goos}}-${{ matrix.goarch }}.tar.gz ./release 
          fi

      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: myapp-${{ matrix.goos }}-${{ matrix.goarch }}
          path: |
            ${{ matrix.goos}}-${{ matrix.goarch }}.tar.gz
            ${{ matrix.goos}}-${{ matrix.goarch }}.zip

      - name: Upload to GitHub Release
        uses: softprops/action-gh-release@v2
        with:
          files: |
            ${{ matrix.goos}}-${{ matrix.goarch }}.tar.gz
            ${{ matrix.goos}}-${{ matrix.goarch }}.zip
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
