name: Release on: push: tags: - 'v*' permissions: contents: write jobs: build-and-release: runs-on: ubuntu-latest steps: - name: Clone repository with submodules run: | git config --global --remove-section http || true git config --global --unset-all core.askPass || true TOKEN="${{ secrets.TOKEN_BUILD }}" git clone --recurse-submodules \ -c credential.helper="" \ https://token:$TOKEN@git.datadunia.com/devops/wireguard-vpn.git . - name: Setup Go uses: actions/setup-go@v5 with: go-version: '1.22' - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Build Vue frontend run: | cd app/frontend npm install npm run build - name: Build Go binaries run: | cd app GOOS=linux GOARCH=amd64 go build -o ../wgrplane-linux-amd64 . GOOS=linux GOARCH=arm64 go build -o ../wgrplane-linux-arm64 . - name: Generate latest.json run: | VERSION="${{ gitea.ref_name }}" RELEASE_DATE="$(date -u +'%Y-%m-%dT%H:%M:%SZ')" REPO="${{ gitea.repository }}" SERVER="${{ gitea.server_url }}" cat > latest.json << ENDJSON { "version": "$VERSION", "release_date": "$RELEASE_DATE", "download_urls": { "amd64": "${SERVER}/${REPO}/releases/download/${VERSION}/wgrplane-linux-amd64", "arm64": "${SERVER}/${REPO}/releases/download/${VERSION}/wgrplane-linux-arm64" } } ENDJSON - name: Create Release and upload assets run: | TOKEN="${{ secrets.TOKEN_BUILD }}" REPO="${{ gitea.repository }}" TAG="${{ gitea.ref_name }}" API="https://git.datadunia.com/api/v1" JSON_BODY=$(printf '{"tag_name":"%s","name":"%s","body":"Release %s","draft":false,"prerelease":false}' "$TAG" "$TAG" "$TAG") RELEASE_RESP=$(curl -s -X POST \ -H "Authorization: token $TOKEN" \ -H "Content-Type: application/json" \ -d "$JSON_BODY" \ "$API/repos/$REPO/releases") echo "Release response: $RELEASE_RESP" RELEASE_ID=$(echo "$RELEASE_RESP" | grep -o '"id":[0-9]*' | head -1 | grep -o '[0-9]*') if [ -z "$RELEASE_ID" ]; then echo "Failed to create release" exit 1 fi for FILE in wgrplane-linux-amd64 wgrplane-linux-arm64 latest.json; do echo "Uploading $FILE..." curl -s -X POST \ -H "Authorization: token $TOKEN" \ -F "attachment=@$FILE" \ "$API/repos/$REPO/releases/$RELEASE_ID/assets?name=$FILE" done - name: Cleanup build artifacts if: always() run: | git config --global --remove-section http || true git config --global --unset-all core.askPass || true rm -f wgrplane-linux-amd64 wgrplane-linux-arm64 latest.json rm -rf app/frontend/node_modules app/frontend/dist echo "Cleanup done"