Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 66a028880c | |||
| 365b12b0eb |
@@ -42,11 +42,10 @@ jobs:
|
||||
echo "APK_PATH=$APK_PATH" >> $GITHUB_ENV
|
||||
echo "Found $APK_PATH"
|
||||
|
||||
- name: Upload APK (artifact)
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: app-release
|
||||
path: ${{ env.APK_PATH }}
|
||||
# Note: uploading artifacts with actions/upload-artifact@v4 is not supported
|
||||
# on some self-hosted/enterprise runners (GHES). We skip storing artifacts
|
||||
# via that action and instead upload the APK directly to the Gitea release
|
||||
# in the steps below.
|
||||
|
||||
- name: Create Gitea release
|
||||
id: create_release
|
||||
@@ -55,44 +54,52 @@ jobs:
|
||||
GITEA_SERVER: ${{ secrets.GIT_SERVER }}
|
||||
run: |
|
||||
set -e
|
||||
if [ -n "$GITEA_SERVER" ]; then
|
||||
API_BASE="$GITEA_SERVER/api/v1"
|
||||
else
|
||||
API_BASE="https://gitea.com/api/v1"
|
||||
fi
|
||||
|
||||
REMOTE_URL=$(git config --get remote.origin.url || true)
|
||||
if [ -z "$REMOTE_URL" ]; then
|
||||
echo "Cannot determine remote origin URL" >&2
|
||||
exit 1
|
||||
fi
|
||||
REPO_FULL=$(echo "$REMOTE_URL" | sed -E 's#.*[:/](.+/.+)\.git$#\1#')
|
||||
API_BASE="${GITEA_SERVER}/api/v1"
|
||||
|
||||
REMOTE_URL=$(git config --get remote.origin.url)
|
||||
echo "Remote URL: $REMOTE_URL"
|
||||
|
||||
REPO_FULL=$(echo "$REMOTE_URL" \
|
||||
| sed -E 's#https?://[^/]+/##' \
|
||||
| sed 's/\.git$//')
|
||||
|
||||
OWNER=$(echo "$REPO_FULL" | cut -d/ -f1)
|
||||
REPO_NAME=$(echo "$REPO_FULL" | cut -d/ -f2)
|
||||
|
||||
TAG=${GITHUB_REF_NAME:-$(echo $GITHUB_REF | sed 's#refs/tags/##')}
|
||||
if [ -z "$TAG" ]; then
|
||||
TAG=$(git describe --tags --exact-match 2>/dev/null || true)
|
||||
fi
|
||||
if [ -z "$TAG" ]; then
|
||||
echo "Cannot determine tag name" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "OWNER=$OWNER"
|
||||
echo "REPO_NAME=$REPO_NAME"
|
||||
|
||||
echo "Creating release $TAG for $OWNER/$REPO_NAME against $API_BASE"
|
||||
TAG="${GITEA_REF_NAME}"
|
||||
|
||||
CREATE_RESPONSE=$(curl -s -H "Content-Type: application/json" -H "Authorization: token $GITEA_TOKEN" \
|
||||
-d "{\"tag_name\": \"$TAG\", \"name\": \"$TAG\", \"body\": \"Automated release for $TAG\", \"draft\": false, \"prerelease\": false}" \
|
||||
echo "Creating release $TAG for $OWNER/$REPO_NAME"
|
||||
|
||||
CREATE_RESPONSE=$(curl -s \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-X POST \
|
||||
-d "{
|
||||
\"tag_name\": \"$TAG\",
|
||||
\"name\": \"$TAG\",
|
||||
\"body\": \"Automated release for $TAG\",
|
||||
\"draft\": false,
|
||||
\"prerelease\": false
|
||||
}" \
|
||||
"$API_BASE/repos/$OWNER/$REPO_NAME/releases")
|
||||
|
||||
RELEASE_ID=$(echo "$CREATE_RESPONSE" | grep -o '"id":[0-9]*' | head -n1 | cut -d: -f2 | tr -d ' ')
|
||||
echo "$CREATE_RESPONSE"
|
||||
|
||||
RELEASE_ID=$(echo "$CREATE_RESPONSE" \
|
||||
| grep -o '"id":[0-9]*' \
|
||||
| head -n1 \
|
||||
| cut -d: -f2)
|
||||
|
||||
if [ -z "$RELEASE_ID" ]; then
|
||||
echo "Failed to create release. Response: $CREATE_RESPONSE" >&2
|
||||
echo "Failed to create release"
|
||||
exit 1
|
||||
fi
|
||||
echo "RELEASE_ID=$RELEASE_ID" >> $GITHUB_ENV
|
||||
echo "Created release id $RELEASE_ID"
|
||||
|
||||
echo "RELEASE_ID=$RELEASE_ID" >> $GITEA_ENV
|
||||
- name: Upload APK to Gitea release
|
||||
env:
|
||||
GITEA_TOKEN: ${{ secrets.GIT_TOKEN }}
|
||||
|
||||
@@ -1,117 +0,0 @@
|
||||
name: Release APK on Tag (Gitea Actions)
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- '*'
|
||||
|
||||
# Note: This workflow requires a repository secret named GITEA_TOKEN with a personal access token
|
||||
# that has `repo` (or appropriate) scope for creating releases and uploading assets.
|
||||
# Optionally set GITEA_SERVER to your Gitea server base URL (e.g. https://gitea.example.com).p
|
||||
|
||||
jobs:
|
||||
build-and-release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Ensure JDK 17
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: '17'
|
||||
|
||||
- name: Build release APK
|
||||
run: |
|
||||
set -e
|
||||
./gradlew :app:assembleRelease --no-daemon --stacktrace
|
||||
|
||||
- name: Locate APK
|
||||
id: locate_apk
|
||||
run: |
|
||||
set -e
|
||||
APK_PATH=$(ls app/build/outputs/apk/release/*.apk | head -n1 || true)
|
||||
if [ -z "$APK_PATH" ]; then
|
||||
echo "No APK found in app/build/outputs/apk/release"
|
||||
exit 1
|
||||
fi
|
||||
echo "APK_PATH=$APK_PATH" >> $GITHUB_ENV
|
||||
echo "Found $APK_PATH"
|
||||
|
||||
- name: Create Gitea release
|
||||
id: create_release
|
||||
env:
|
||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||
GITEA_SERVER: ${{ secrets.GITEA_SERVER }}
|
||||
run: |
|
||||
set -e
|
||||
# Determine API base URL
|
||||
if [ -n "$GITEA_SERVER" ]; then
|
||||
API_BASE="$GITEA_SERVER/api/v1"
|
||||
else
|
||||
API_BASE="https://gitea.com/api/v1"
|
||||
fi
|
||||
|
||||
# Derive owner/repo from git remote
|
||||
REMOTE_URL=$(git config --get remote.origin.url || true)
|
||||
if [ -z "$REMOTE_URL" ]; then
|
||||
echo "Cannot determine remote origin URL" >&2
|
||||
exit 1
|
||||
fi
|
||||
REPO_FULL=$(echo "$REMOTE_URL" | sed -E 's#.*[:/](.+/.+)\.git$#\1#')
|
||||
OWNER=$(echo "$REPO_FULL" | cut -d/ -f1)
|
||||
REPO_NAME=$(echo "$REPO_FULL" | cut -d/ -f2)
|
||||
|
||||
TAG=${GITHUB_REF_NAME:-$(echo $GITHUB_REF | sed 's#refs/tags/##')}
|
||||
if [ -z "$TAG" ]; then
|
||||
# fallback: use git to get tag from HEAD
|
||||
TAG=$(git describe --tags --exact-match 2>/dev/null || true)
|
||||
fi
|
||||
if [ -z "$TAG" ]; then
|
||||
echo "Cannot determine tag name" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Creating release $TAG for $OWNER/$REPO_NAME against $API_BASE"
|
||||
|
||||
CREATE_RESPONSE=$(curl -s -H "Content-Type: application/json" -H "Authorization: token $GITEA_TOKEN" \
|
||||
-d "{\"tag_name\": \"$TAG\", \"name\": \"$TAG\", \"body\": \"Automated release for $TAG\", \"draft\": false, \"prerelease\": false}" \
|
||||
"$API_BASE/repos/$OWNER/$REPO_NAME/releases")
|
||||
|
||||
RELEASE_ID=$(echo "$CREATE_RESPONSE" | grep -o '"id":[0-9]*' | head -n1 | cut -d: -f2 | tr -d ' ')
|
||||
if [ -z "$RELEASE_ID" ]; then
|
||||
echo "Failed to create release. Response: $CREATE_RESPONSE" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "RELEASE_ID=$RELEASE_ID" >> $GITHUB_ENV
|
||||
echo "Created release id $RELEASE_ID"
|
||||
|
||||
- name: Upload APK to Gitea release
|
||||
env:
|
||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||
GITEA_SERVER: ${{ secrets.GITEA_SERVER }}
|
||||
run: |
|
||||
set -e
|
||||
API_BASE=${GITEA_SERVER:+$GITEA_SERVER/api/v1}
|
||||
API_BASE=${API_BASE:-https://gitea.com/api/v1}
|
||||
REMOTE_URL=$(git config --get remote.origin.url || true)
|
||||
REPO_FULL=$(echo "$REMOTE_URL" | sed -E 's#.*[:/](.+/.+)\.git$#\1#')
|
||||
OWNER=$(echo "$REPO_FULL" | cut -d/ -f1)
|
||||
REPO_NAME=$(echo "$REPO_FULL" | cut -d/ -f2)
|
||||
APK_PATH=${APK_PATH:-$APK_PATH}
|
||||
if [ -z "$APK_PATH" ]; then
|
||||
echo "APK_PATH not set" >&2
|
||||
exit 1
|
||||
fi
|
||||
RELEASE_ID=${RELEASE_ID}
|
||||
if [ -z "$RELEASE_ID" ]; then
|
||||
echo "RELEASE_ID not set" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
UPLOAD_URL="$API_BASE/repos/$OWNER/$REPO_NAME/releases/$RELEASE_ID/assets?name=$(basename $APK_PATH)"
|
||||
echo "Uploading $APK_PATH to $UPLOAD_URL"
|
||||
|
||||
curl --fail -H "Authorization: token $GITEA_TOKEN" -H "Content-Type: application/octet-stream" \
|
||||
--data-binary @"$APK_PATH" "$UPLOAD_URL"
|
||||
@@ -1,68 +0,0 @@
|
||||
name: Release APK on Tag
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- '*'
|
||||
|
||||
jobs:
|
||||
build-and-release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '17'
|
||||
|
||||
- name: Cache Gradle
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.gradle/caches
|
||||
~/.gradle/wrapper
|
||||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-gradle-
|
||||
|
||||
- name: Build release APK
|
||||
run: ./gradlew :app:assembleRelease --no-daemon --stacktrace
|
||||
|
||||
- name: Find APK
|
||||
id: find_apk
|
||||
run: |
|
||||
set -e
|
||||
APK=$(ls app/build/outputs/apk/release/*.apk | head -n1 || true)
|
||||
if [ -z "$APK" ]; then
|
||||
echo "No APK found in app/build/outputs/apk/release"
|
||||
exit 1
|
||||
fi
|
||||
echo "APK_PATH=$APK" >> $GITHUB_ENV
|
||||
echo "apk=$APK"
|
||||
|
||||
- name: Upload artifact (for debugging)
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: app-release-apk
|
||||
path: ${{ env.APK_PATH }}
|
||||
|
||||
- name: Create GitHub Release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
with:
|
||||
tag_name: ${{ github.ref_name }}
|
||||
release_name: Release ${{ github.ref_name }}
|
||||
body: Automated release for tag ${{ github.ref_name }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
|
||||
- name: Upload APK to Release
|
||||
uses: actions/upload-release-asset@v1
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: ${{ env.APK_PATH }}
|
||||
asset_name: app-release.apk
|
||||
asset_content_type: application/vnd.android.package-archive
|
||||
Reference in New Issue
Block a user