diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..bcd33ca --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,71 @@ +name: Build and Release + +on: + push: + tags: + - 'v*' + +jobs: + build-and-release: + runs-on: ubuntu-latest + container: + image: devkitpro/devkitarm:20251231 + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Build payload + env: + DEVKITARM: /opt/devkitpro/devkitARM + run: make + + - name: Create release and upload asset + env: + SERVER_URL: ${{ github.server_url }} + API_URL: ${{ github.api_url }} + REPOSITORY: ${{ github.repository }} + GITHUB_REF: ${{ github.ref }} + TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + TAG="${GITHUB_REF#refs/tags/}" + BIN_PATH="output/OmniNX-Installer.bin" + + # API URL: GitHub uses api.github.com, Gitea uses server_url/api/v1 + if [[ "$API_URL" != "" ]]; then + API_BASE="$API_URL" + else + API_BASE="$SERVER_URL/api/v1" + fi + + # Create release + RELEASE_RESPONSE=$(curl -s -X POST \ + -H "Authorization: token $TOKEN" \ + -H "Content-Type: application/json" \ + -d "{\"tag_name\": \"$TAG\", \"name\": \"$TAG\", \"body\": \"OmniNX Installer Payload $TAG\"}" \ + "$API_BASE/repos/$REPOSITORY/releases") + + RELEASE_ID=$(echo "$RELEASE_RESPONSE" | grep -o '"id":[0-9]*' | head -1 | cut -d':' -f2) + UPLOAD_URL=$(echo "$RELEASE_RESPONSE" | grep -o '"upload_url":"[^"]*' | head -1 | cut -d'"' -f4) + + if [ -z "$RELEASE_ID" ]; then + echo "Failed to create release. Response: $RELEASE_RESPONSE" + exit 1 + fi + + # Upload asset (GitHub uses upload_url; Gitea uses assets endpoint) + if [[ -n "$UPLOAD_URL" ]]; then + UPLOAD_URL="${UPLOAD_URL%%\{*}" + curl -X POST \ + -H "Authorization: token $TOKEN" \ + -H "Content-Type: application/octet-stream" \ + --data-binary "@$BIN_PATH" \ + "${UPLOAD_URL}?name=OmniNX-Installer.bin" + else + curl -X POST \ + -H "Authorization: token $TOKEN" \ + -F "attachment=@$BIN_PATH" \ + "$API_BASE/repos/$REPOSITORY/releases/$RELEASE_ID/assets?name=OmniNX-Installer.bin" + fi diff --git a/README.md b/README.md index 20c0868..ba18eaa 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,15 @@ make clean make ``` -The built payload will be output to `output/omninx-installer.bin`. +The built payload will be output to `output/OmniNX-Installer.bin`. + +### CI / GitHub Actions + +Pushing a version tag (e.g. `v1.0.0`) triggers a build and creates a release with the `.bin` file attached. + +**GitHub:** Uses the built-in `GITHUB_TOKEN` automatically. + +**Gitea:** Add a `GITHUB_TOKEN` secret (Settings → Secrets and Variables → Actions) with a token that has permission to create releases. ## Usage