From 185b5277335643e3b6367b9c308009154aa854e7 Mon Sep 17 00:00:00 2001 From: XargonWan Date: Thu, 5 Jun 2025 17:58:16 +0900 Subject: [PATCH] feat(workflow): started to write a script to automate the repo update and release cycle --- .github/workflows/publish_release.yaml | 90 ++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 .github/workflows/publish_release.yaml diff --git a/.github/workflows/publish_release.yaml b/.github/workflows/publish_release.yaml new file mode 100644 index 0000000..56eb846 --- /dev/null +++ b/.github/workflows/publish_release.yaml @@ -0,0 +1,90 @@ +name: Check and Publish New XRoar Release + +on: + workflow_dispatch: + schedule: + - cron: '0 6 * * *' # Runs daily at 6:00 UTC + +jobs: + check-xroar-release: + runs-on: ubuntu-latest + steps: + - name: 'Checkout repository' + uses: actions/checkout@v4 + + - name: 'Get latest GitHub release tag' + id: get_latest_release + uses: actions/github-script@v7 + with: + script: | + const releases = await github.rest.repos.listReleases({ + owner: context.repo.owner, + repo: context.repo.repo, + per_page: 1 + }); + if (releases.data.length === 0) { + core.setFailed('No releases found'); + } else { + const tag = releases.data[0].tag_name; + core.setOutput('tag', tag); + } + + - name: 'Fetch XRoar website' + id: fetch_xroar_page + run: | + curl -sSL https://www.6809.org.uk/xroar/ > xroar_page.html + + - name: 'Extract version from XRoar page' + id: extract_version + run: | + version=$(grep -oP 'Source code version \K[0-9]+\.[0-9]+\.[0-9]+' xroar_page.html | head -n1) + echo "version=$version" >> $GITHUB_OUTPUT + + - name: 'Compare versions' + id: compare_versions + run: | + latest_tag="${{ steps.get_latest_release.outputs.tag }}" + web_version="${{ steps.extract_version.outputs.version }}" + echo "Latest tag: $latest_tag" + echo "Web version: $web_version" + if [[ "$latest_tag" == "$web_version" ]]; then + echo "No new version found." + echo "update_needed=false" >> $GITHUB_OUTPUT + else + echo "New version detected." + echo "update_needed=true" >> $GITHUB_OUTPUT + fi + + - name: 'Extract download link from XRoar page' + if: steps.compare_versions.outputs.update_needed == 'true' + id: extract_download_link + run: | + version="${{ steps.extract_version.outputs.version }}" + url=$(grep -oP "https://www.6809.org.uk/xroar/dl/xroar-${version}\.tar\.gz" xroar_page.html | head -n1) + if [ -z "$url" ]; then + echo "Download link not found" + exit 1 + fi + echo "url=$url" >> $GITHUB_OUTPUT + + - name: 'Download and extract new source' + if: steps.compare_versions.outputs.update_needed == 'true' + run: | + url="${{ steps.extract_download_link.outputs.url }}" + curl -sSL "$url" -o xroar.tar.gz + tar -xzf xroar.tar.gz --strip-components=1 + + - name: 'Commit and push updated source' + if: steps.compare_versions.outputs.update_needed == 'true' + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git checkout -b "update-xroar-${{ steps.extract_version.outputs.version }}" + git add . + git commit -m "Update XRoar source to version ${{ steps.extract_version.outputs.version }}" + git push --set-upstream origin "update-xroar-${{ steps.extract_version.outputs.version }}" + + - name: 'Build XRoar (placeholder)' + if: steps.compare_versions.outputs.update_needed == 'true' + run: | + echo "TODO: Add build steps here" \ No newline at end of file