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. Bersihkan semua config global agar tidak ada interferensi header git config --global --remove-section http || true git config --global --unset-all core.askPass || true # 2. Masukkan token ke variabel TOKEN="${{ secrets.TOKEN_BUILD }}" # 3. Lakukan clone dengan menyuntikkan token ke URL # Format: https://x-token-auth:TOKEN@DOMAIN/REPO.git # Kita gunakan -c credential.helper="" agar git tidak mencari password di sistem git clone --recurse-submodules \ -c credential.helper="" \ https://x-token-auth:$TOKEN@git.datadunia.com/devops/wireguard-vpn.git . - name: Debug Submodule Folder run: | ls -la app/ ls -la app/frontend || echo "Frontend folder not found" - 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: 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 generate-latest-json: needs: build runs-on: ubuntu-latest steps: - name: Cleanup Git Config if: always() # Pastikan tetap jalan meski job gagal run: | - name: Cleanup Git Config if: always() run: | git config --global --unset-all http."https://git.datadunia.com/".extraheader git config --global --unset core.askPass