name: Release on: push: tags: - 'v*' permissions: contents: write actions: read jobs: build: runs-on: ubuntu-latest strategy: matrix: goarch: [amd64, arm64] steps: - name: Clone repository with submodules run: | # 1. Tentukan Header Otorisasi # Gitea menerima format "Bearer" untuk token aksi AUTH_HEADER="Authorization: Bearer ${{ gitea.token }}" # 2. Suntikkan konfigurasi secara dinamis (hanya untuk sesi ini) # Ini akan mengirimkan header ke repo utama DAN semua submodules export GIT_CONFIG_COUNT=1 export GIT_CONFIG_KEY_0="http.${{ gitea.server_url }}/.extraheader" export GIT_CONFIG_VALUE_0="$AUTH_HEADER" # 3. Jalankan clone # Gunakan variabel langsung, Git akan menangani sisanya git clone --recurse-submodules ${{ gitea.server_url }}/${{ gitea.repository }}.git . # Debug untuk memastikan submodule 'app' terisi ls -la app/ - name: Setup Go uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff with: go-version: '1.22' - name: Setup Node.js uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 with: node-version: '20' - name: Build Vue frontend run: | cd app/frontend npm install npm run build - name: Build Go binary env: GOOS: linux GOARCH: ${{ matrix.goarch }} run: | cd app go build -o ../wgrplane-linux-${{ matrix.goarch }} . - name: Upload binary artifact uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: wgrplane-linux-${{ matrix.goarch }} path: wgrplane-linux-${{ matrix.goarch }} - name: Cleanup Git Config if: always() # Pastikan tetap jalan meski job gagal run: | git config --global --unset-all url."https://token:${{ gitea.token }}@${{ gitea.server_url | replace("https://", "") }}/".insteadOf generate-latest-json: needs: build runs-on: ubuntu-latest steps: - name: Clone repository with submodules run: | # 1. Tentukan Header Otorisasi # Gitea menerima format "Bearer" untuk token aksi AUTH_HEADER="Authorization: Bearer ${{ gitea.token }}" # 2. Suntikkan konfigurasi secara dinamis (hanya untuk sesi ini) # Ini akan mengirimkan header ke repo utama DAN semua submodules export GIT_CONFIG_COUNT=1 export GIT_CONFIG_KEY_0="http.${{ gitea.server_url }}/.extraheader" export GIT_CONFIG_VALUE_0="$AUTH_HEADER" # 3. Jalankan clone # Gunakan variabel langsung, Git akan menangani sisanya git clone --recurse-submodules ${{ gitea.server_url }}/${{ gitea.repository }}.git . # Debug untuk memastikan submodule 'app' terisi ls -la app/ - name: Generate latest.json run: | VERSION="${{ gitea.ref_name }}" if [ -z "$VERSION" ]; then VERSION="$(git rev-parse --short HEAD)" fi RELEASE_DATE="$(date -u +'%Y-%m-%dT%H:%M:%SZ')" CHANGELOG="$(git log --oneline --no-merges $(git describe --tags --abbrev=0 2>/dev/null || echo 'HEAD~10')..HEAD 2>/dev/null || git log --oneline --no-merges -10)" # Generate latest.json cat > latest.json << EOF { "version": "$VERSION", "release_date": "$RELEASE_DATE", "changelog": $(echo "$CHANGELOG" | jq -R -s '.'), "download_urls": { "amd64": "${{ gitea.server_url }}/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }}/artifacts/$(curl -s -H 'Authorization: Bearer ${{ secrets.TOKEN }}' '${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }}/artifacts' | jq -r '.data[] | select(.name == "wgrplane-linux-amd64") | .id')", "arm64": "${{ gitea.server_url }}/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }}/artifacts/$(curl -s -H 'Authorization: Bearer ${{ secrets.TOKEN }}' '${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }}/artifacts' | jq -r '.data[] | select(.name == "wgrplane-linux-arm64") | .id')" } } EOF - name: Upload latest.json artifact uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: latest.json path: latest.json # - name: Cleanup Git Config # if: always() # Pastikan tetap jalan meski job gagal # run: | # git config --global --unset-all url."https://token:${{ gitea.token }}@${{ gitea.server_url | replace("https://", "") }}/".insteadOf