diff --git a/.gitea/workflows/auto-tag.yml b/.gitea/workflows/auto-tag.yml deleted file mode 100644 index e985798..0000000 --- a/.gitea/workflows/auto-tag.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Auto Tag on Version Change - -on: - push: - branches: - - main - -jobs: - check-version: - runs-on: docker-compose - - steps: - - name: Checkout source code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - token: ${{ secrets.PAT_GITEA }} - - - name: Check version and prepare release - id: version - run: | - VERSION=$(grep 'versionName = ' app/build.gradle.kts | sed 's/.*versionName = "\(.*\)".*/\1/') - VERSION_CODE=$(grep 'versionCode = ' app/build.gradle.kts | sed 's/.*versionCode = \([0-9]*\).*/\1/') - echo "version=$VERSION" >> $GITHUB_OUTPUT - echo "version_code=$VERSION_CODE" >> $GITHUB_OUTPUT - - BEFORE="${{ github.event.before }}" - if [ -z "$BEFORE" ] || ! git cat-file -e "${BEFORE}^{commit}" 2>/dev/null; then - BEFORE="HEAD~1" - fi - PREV_VERSION_CODE=$(git show "${BEFORE}:app/build.gradle.kts" 2>/dev/null | grep 'versionCode = ' | sed 's/.*versionCode = \([0-9]*\).*/\1/') - - if [ "$VERSION_CODE" = "$PREV_VERSION_CODE" ]; then - echo "versionCode unchanged (${VERSION_CODE}), skipping" - echo "should_release=false" >> $GITHUB_OUTPUT - elif git tag -l | grep -q "^v${VERSION}$"; then - echo "versionCode changed (${PREV_VERSION_CODE} -> ${VERSION_CODE}) but tag v${VERSION} already exists; bump versionName" - exit 1 - else - echo "New versionCode detected: ${PREV_VERSION_CODE} -> ${VERSION_CODE} (v${VERSION})" - echo "should_release=true" >> $GITHUB_OUTPUT - fi - - - name: Create and push tag - if: steps.version.outputs.should_release == 'true' - run: | - VERSION="${{ steps.version.outputs.version }}" - git tag "v${VERSION}" - git push origin "v${VERSION}" - echo "Created and pushed tag v${VERSION}" diff --git a/.gitea/workflows/build-apk.yml b/.gitea/workflows/build-apk.yml index 6ac8b7f..7cb5c74 100644 --- a/.gitea/workflows/build-apk.yml +++ b/.gitea/workflows/build-apk.yml @@ -1,9 +1,9 @@ -name: Build and Release APK +name: Build APK on: push: - tags: - - 'v*' + branches: + - main jobs: build: @@ -26,61 +26,55 @@ jobs: run: | APP_NAME="${{ gitea.repository }}" APP_NAME="${APP_NAME//\//-}" - TAG="${{ gitea.ref_name }}" - find .build/release/release/ -maxdepth 1 -name "*.apk" | head -1 | xargs -I{} mv {} ".build/release/release/${APP_NAME}-${TAG}.apk" + SHA="${{ gitea.sha }}" + SHORT="${SHA:0:7}" + find .build/release/release/ -maxdepth 1 -name "*.apk" | head -1 | xargs -I{} mv {} ".build/release/release/${APP_NAME}-${SHORT}.apk" - - name: Extract release notes - run: | - VERSION_CODE=$(grep 'versionCode = ' app/build.gradle.kts | sed 's/.*versionCode = \([0-9]*\).*/\1/') - CHANGELOG="fastlane/metadata/android/en-US/changelogs/${VERSION_CODE}.txt" - - if [ -f "$CHANGELOG" ]; then - cp "$CHANGELOG" release_notes.md - else - echo "No changelog found at $CHANGELOG" - echo "No release notes" > release_notes.md - fi - - - name: Create Gitea Release + - name: Publish to rolling "dev" release env: GITEA_SERVER_URL: ${{ gitea.server_url }} GITEA_REPOSITORY: ${{ gitea.repository }} GITEA_TOKEN: ${{ secrets.PAT_GITEA }} + SHA: ${{ gitea.sha }} run: | + set -e APP_NAME="${{ gitea.repository }}" APP_NAME="${APP_NAME//\//-}" - TAG="${{ gitea.ref_name }}" - TITLE="${APP_NAME} ${TAG}" - NOTES_FILE="release_notes.md" - ASSET_PATH=".build/release/release/${APP_NAME}-${TAG}.apk" + SHORT="${SHA:0:7}" + TAG="dev" + ASSET_PATH=".build/release/release/${APP_NAME}-${SHORT}.apk" + API_URL="${GITEA_SERVER_URL}/api/v1/repos/${GITEA_REPOSITORY}" + AUTH="Authorization: token ${GITEA_TOKEN}" - API_URL="${GITEA_SERVER_URL}/api/v1/repos/${GITEA_REPOSITORY}/releases" + # Remove the previous rolling release and its tag so "dev" always points at this commit. + OLD_ID=$(curl -s -H "$AUTH" "${API_URL}/releases/tags/${TAG}" | jq -r '.id // empty') + if [ -n "$OLD_ID" ]; then + curl -s -X DELETE -H "$AUTH" "${API_URL}/releases/${OLD_ID}" || true + fi + curl -s -X DELETE -H "$AUTH" "${API_URL}/tags/${TAG}" || true - RELEASE_RESPONSE=$(curl -s -X POST "$API_URL" \ - -H "Authorization: token ${GITEA_TOKEN}" \ + RELEASE_RESPONSE=$(curl -s -X POST "${API_URL}/releases" \ + -H "$AUTH" \ -H "Content-Type: application/json" \ -d "{ \"tag_name\": \"${TAG}\", - \"name\": \"${TITLE}\", - \"body\": $(jq -Rs . < "$NOTES_FILE") + \"target_commitish\": \"${SHA}\", + \"name\": \"Latest dev build\", + \"body\": \"Automatic build of ${SHORT}.\", + \"prerelease\": true }") RELEASE_ID=$(echo "$RELEASE_RESPONSE" | jq -r '.id') - if [ "$RELEASE_ID" = "null" ] || [ -z "$RELEASE_ID" ]; then echo "Failed to create release:" echo "$RELEASE_RESPONSE" exit 1 fi - echo "Created release with ID: $RELEASE_ID" - ASSET_NAME=$(basename "$ASSET_PATH") - UPLOAD_URL="${API_URL}/${RELEASE_ID}/assets?name=${ASSET_NAME}" - - curl -s -X POST "$UPLOAD_URL" \ - -H "Authorization: token ${GITEA_TOKEN}" \ + curl -s -X POST "${API_URL}/releases/${RELEASE_ID}/assets?name=${ASSET_NAME}" \ + -H "$AUTH" \ -H "Content-Type: application/octet-stream" \ --data-binary "@${ASSET_PATH}" - echo "Uploaded asset: $ASSET_NAME" + echo "Published ${ASSET_NAME} to the '${TAG}' release."