Check for New Release in Another Repo #2462
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Check for New Release in Another Repo | |
on: | |
schedule: | |
- cron: '0 * * * *' # Every hour | |
workflow_dispatch: | |
permissions: | |
contents: read | |
actions: write # Required to delete the cache | |
jobs: | |
check_release: | |
runs-on: ubuntu-latest | |
env: | |
cache-key: previous-release # Key for the cache | |
steps: | |
# Step 1: Set up GitHub CLI | |
- name: Set up GitHub CLI | |
run: | | |
sudo apt-get install -y gh | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# Step 2: Restore Cache | |
- name: Restore Cache | |
id: cache-restore | |
uses: actions/cache/restore@v3 | |
with: | |
path: .previous_release | |
key: ${{ env.cache-key }} | |
# Step 3: Fetch the latest release from the other repository | |
- name: Get latest release from other repository | |
id: get_release | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
repo_owner="Byte-Nova" | |
repo_name="Rimworld-Together" | |
latest_release=$(gh api repos/${repo_owner}/${repo_name}/releases/latest --jq '.tag_name') | |
echo "LATEST_RELEASE=$latest_release" >> $GITHUB_ENV | |
# Step 4: Compare with the previous release (stored in cache) | |
- name: Check for new release | |
id: check_release | |
run: | | |
# Check if the previous release file exists; if not, initialize it | |
if [ -f .previous_release ]; then | |
previous_release=$(cat .previous_release) | |
else | |
echo "DEBUG: .previous_release file not found. Initializing..." | |
previous_release="none" | |
fi | |
# Get the latest release version | |
latest_release="${{ env.LATEST_RELEASE }}" | |
echo "Previous release: $previous_release" | |
echo "Latest release: $latest_release" | |
# Compare and decide whether to update .previous_release | |
if [ "$previous_release" != "$latest_release" ]; then | |
echo "New release detected!" | |
echo "$latest_release" > .previous_release # Update with new release | |
echo "NEW_RELEASE=true" >> $GITHUB_ENV | |
else | |
echo "No new release." | |
echo "NEW_RELEASE=false" >> $GITHUB_ENV | |
fi | |
# Step 5: Delete Previous Cache | |
- name: Checkout Repository | |
uses: actions/checkout@v3 | |
- name: Debug Current Directory | |
run: | | |
echo "Current working directory: $(pwd)" | |
ls -la | |
- name: Delete Previous Cache | |
if: env.NEW_RELEASE == 'true' && steps.cache-restore.outputs.cache-hit == 'true' | |
continue-on-error: true | |
run: | | |
gh extension install actions/gh-actions-cache --force | |
echo "Deleting cache with key: ${{ env.cache-key }}" | |
gh actions-cache delete "${{ env.cache-key }}" --confirm | |
working-directory: ${{ github.workspace }} | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# Step 6: Save New Cache | |
- name: Recreate Cache File | |
if: env.NEW_RELEASE == 'true' | |
run: | | |
echo "Recreating .previous_release..." | |
latest_release="${{ env.LATEST_RELEASE }}" | |
if [ ! -f .previous_release ]; then | |
echo "$latest_release" > .previous_release # Update with new release | |
fi | |
cat .previous_release | |
- name: Save Cache | |
if: env.NEW_RELEASE == 'true' | |
uses: actions/cache/save@v3 | |
with: | |
path: .previous_release | |
key: ${{ env.cache-key }} | |
# Step 7: Trigger the docker-build.yml workflow if a new release is detected | |
- name: Trigger Docker build workflow | |
if: env.NEW_RELEASE == 'true' | |
run: | | |
curl -X POST \ | |
-H "Accept: application/vnd.github.v3+json" \ | |
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
https://api.github.com/repos/${{ github.repository }}/actions/workflows/docker-build.yml/dispatches \ | |
-d '{"ref": "main"}' |