Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 60 additions & 44 deletions .github/workflows/nightly-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,14 @@
if: github.repository_owner == 'Acode-Foundation'

permissions:
# contents write is needed to create Nightly Releases.
contents: write
pull-requests: write
pull-requests: read

outputs:
release_output_url: ${{ steps.release.outputs.url }}
updated_version: ${{ steps.update-version.outputs.UPDATED_VERSION}}
RELEASE_NOTES: ${{ env.RELEASE_NOTES }}
outputs:
updated_version: ${{ steps.update-version.outputs.UPDATED_VERSION}}
NORMAL_APK_PATH: ${{ steps.update-version.outputs.NORMAL_APK_PATH }}
FDROID_APK_PATH: ${{ steps.update-version.outputs.FDROID_APK_PATH }}
tag_commit: ${{ steps.check-nightly-tag-force-update.outputs.tag_commit }}
release_required: ${{ steps.check-nightly-tag-force-update.outputs.release_required }}
steps:
- name: Fast Fail if secrets are missing
if: ${{ env.KEYSTORE_CONTENT == '' || env.BUILD_JSON_CONTENT == '' }}
Expand Down Expand Up @@ -216,78 +216,94 @@
rm $STORE_FILE_PATH $BUILD_JSON_PATH
echo "Keystore and build.json removed successfully."

- name: Check Nightly Tag and Force Update
#if: github.event_name == 'push' && contains(github.event.ref, 'tags/nightly') == false
if: ${{ ! inputs.skip_tagging_and_releases }}
- name: Check Nightly Tag
if: ${{ !inputs.skip_tagging_and_releases && !inputs.is_PR }}
id: check-nightly-tag-force-update
run: |
# Check if the nightly tag exists and get the commit it points to
if git show-ref --quiet refs/tags/nightly; then
TAG_COMMIT=$(git rev-parse nightly)
else
TAG_COMMIT=""
fi

# If the current commit is the same as the tag, skip updating the tag

if [ "$TAG_COMMIT" != "${{ env.GIT_COMMIT }}" ]; then
echo "releaseRequired=true" >> $GITHUB_ENV
# export tag commit before updating for change logs comparing.
echo "TAG_COMMIT=$TAG_COMMIT" >> $GITHUB_ENV

git config --global user.name 'GitHub Actions'
git config --global user.email 'github-actions@github.com'
git tag -f nightly
git push origin nightly --force
echo "release_required=true" >> "$GITHUB_OUTPUT"
else
echo "Nightly tag already points to this commit. Skipping update."
echo "release_required=false" >> "$GITHUB_OUTPUT"
fi
echo "tag_commit=$TAG_COMMIT" >> "$GITHUB_OUTPUT"

release:
needs: build
runs-on: ubuntu-latest
if: ${{ github.repository_owner == 'Acode-Foundation' && !inputs.is_PR && !inputs.skip_tagging_and_releases && needs.build.outputs.release_required == 'true' }}
permissions:
contents: write

outputs:
release_output_url: ${{ steps.release.outputs.url }}
RELEASE_NOTES: ${{ env.RELEASE_NOTES }}
steps:
- name: Checkout Repository
uses: actions/checkout@v7
with:
fetch-depth: 0
persist-credentials: true

- name: Force-update nightly tag
run: |
git config --global user.name 'GitHub Actions'
git config --global user.email 'github-actions@github.com'
git tag -f nightly "${{ github.sha }}"
git push origin nightly --force

- name: Download APK artifacts
uses: actions/download-artifact@v7
with:
path: /tmp/artifacts

# 🚨⚠️ WARNING: the GITHUB_TOKEN under this step, has access to write & read access to Contents, Pull Requests
# Which is why, it uses a fine-granted token with Read-Only Access to Public Repos Only.
- name: Generate Release Notes (Experimental)
if: ${{ success() && env.releaseRequired == 'true' }}
id: gen-release-notes
continue-on-error: true
run: |
RELEASE_NOTES=$(node utils/scripts/generate-release-notes.js ${{ github.repository_owner }} Acode ${{ github.sha }} --format md --from-tag ${{ env.TAG_COMMIT }} --important-only --quiet --changelog-only)
{
echo "RELEASE_NOTES<<EOF"
echo "$RELEASE_NOTES"
echo "EOF"
} >> $GITHUB_ENV
env:
RELEASE_NOTES=$(node utils/scripts/generate-release-notes.js ${{ github.repository_owner }} Acode ${{ github.sha }} --format md --from-tag ${{ needs.build.outputs.tag_commit }} --important-only --quiet --changelog-only || true)
{
echo "RELEASE_NOTES<<EOF"
echo "$RELEASE_NOTES"
echo "EOF"
} >> $GITHUB_ENV
env:
GITHUB_TOKEN: ${{ secrets.NIGHTLY_RELEASE_NOTES_GH_TOKEN }}

- name: Release Nightly Version
# Only run this step, if not called from another workflow. And a previous step is successful with releasedRequired=true
id: release
if: ${{ ! inputs.skip_tagging_and_releases && steps.check-nightly-tag-force-update.outcome == 'success' && env.releaseRequired == 'true' && !inputs.is_PR }}
uses: softprops/action-gh-release@v3
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
with:
prerelease: true
name: ${{ env.UPDATED_VERSION }}
tag_name: ${{ env.UPDATED_VERSION }}
name: ${{ needs.build.outputs.updated_version }}
tag_name: ${{ needs.build.outputs.updated_version }}
files: |
${{ env.NORMAL_APK_PATH }}
${{ env.FDROID_APK_PATH }}
/tmp/artifacts/**/acode-debug-normal-*.apk
/tmp/artifacts/**/acode-debug-fdroid-*.apk
body: |
Automated Nightly (pre-release) Releases for Today
[Compare Changes](https://github.com/${{ github.repository }}/compare/${{ env.TAG_COMMIT }}...${{ github.sha }})

[Compare Changes](https://github.com/${{ github.repository }}/compare/${{ needs.build.outputs.tag_commit }}...${{ github.sha }})

${{ env.RELEASE_NOTES }}


community-release-notifier:
needs: build
needs: [build, release]
# Run only if push tags, or triggered by a schedule
if: ${{ github.repository_owner == 'Acode-Foundation' && (contains(fromJSON('["push", "schedule"]'), github.event_name) || ! inputs.skip_tagging_and_releases) && needs.build.outputs.release_output_url }}
if: ${{ github.repository_owner == 'Acode-Foundation' && (contains(fromJSON('["push", "schedule"]'), github.event_name) || ! inputs.skip_tagging_and_releases) && needs.release.outputs.release_output_url }}
uses: Acode-Foundation/acode/.github/workflows/community-release-notifier.yml@main
with:
tag_name: ${{ needs.build.outputs.updated_version }}
url: ${{ needs.build.outputs.release_output_url }}
body: ${{ needs.build.outputs.RELEASE_NOTES }}
url: ${{ needs.release.outputs.release_output_url }}
body: ${{ needs.release.outputs.RELEASE_NOTES }}
secrets:
DISCORD_WEBHOOK_RELEASE_NOTES: ${{ secrets.DISCORD_WEBHOOK_RELEASE_NOTES }}
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
Expand Down