Wplace-BlueMarble/.github/workflows/build.yml
2025-07-31 04:52:37 -04:00

172 lines
5.9 KiB
YAML

name: Bump, Build, Release
on:
push:
branches:
- main
jobs:
# Updates the Auto branch to match Main
update-auto:
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Update Auto To Main
run: |
git fetch origin
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
git checkout auto || git checkout -b auto
git reset --hard origin/main
git push --force origin auto
# Builds the code
# This is bundling, obfuscating, version bumping, etc.
build:
permissions:
contents: write
runs-on: ubuntu-latest
needs: [update-auto] # Needs the update-auto job to finish first
outputs:
TITLE: ${{ steps.get-commit-message.outputs.TITLE }}
BODY: ${{ steps.get-commit-message.outputs.BODY }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: npm install
- name: Update userscript version
run: |
npm version minor --no-git-tag-version
node build/update-version.js
- name: Build userscript
run: npm run build
- name: Get current version
id: get_version
run: |
current_version=$(jq -r '.version' package.json)
echo "Current version: $current_version"
echo "current_version=$current_version" >> $GITHUB_OUTPUT
- name: Update static version numbers
run: |
current_version=${{ steps.get_version.outputs.current_version }}
if [ -f "docs/README.md" ]; then
echo "README.md exists. Modifying..."
else
echo "README.md was not found. Skipping..."
fi
sed -i 's|\(Latest_Version-\)[^-\ ]*\(-lightblue\)|\1'$current_version'\2|' docs/README.md
- name: Update compression badge
run: |
dist_size=$(find dist -type f -exec cat {} + | wc -c)
src_size=$(find src dist/assets -type f -exec cat {} + | wc -c)
percentage=$(awk "BEGIN {printf \"%.2f\", 100 - ($dist_size * 100) / $src_size}")
echo "Compression: $percentage"
badge_url="https://img.shields.io/badge/Compression-${percentage}%25-blue"
sed -i -E 's#https://img.shields.io/badge/Compression-[^"]*#'"$badge_url"'#' docs/README.md
- name: Get the previous commit message
id: get-commit-message
run: |
COMMIT_MSG="$(git log -1 --pretty=%B)"
TITLE="$(echo "$COMMIT_MSG" | head -n1)"
BODY="$(echo "$COMMIT_MSG" | tail -n +2)"
{
echo "TITLE<<EOF"
echo "$TITLE"
echo "EOF"
echo "BODY<<EOF"
echo "$BODY"
echo "EOF"
} >> $GITHUB_OUTPUT
# This should happen on 'auto' branch
- name: Commit and push built script
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
git checkout auto || git checkout -b auto
git add dist/*
git add src/BlueMarble.meta.js
git add package.json
git add docs/README.md
git commit -m "Bumped version; ${{ steps.get-commit-message.outputs.TITLE }}" -m "${{ steps.get-commit-message.outputs.BODY }}" || echo "No changes to commit"
git push --set-upstream origin auto
# Updates the requirement link SHA
update-requirements:
permissions:
contents: write
runs-on: ubuntu-latest
needs: [update-auto, build] # Needs the update-auto and build jobs to finish first
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: auto # Checks out the auto branch
fetch-depth: 0
- name: Get SHA of origin/auto
run: |
git fetch origin auto
AUTO_SHA=$(git rev-parse origin/auto)
echo "Auto SHA: $AUTO_SHA"
echo "AUTO_SHA=$AUTO_SHA" >> $GITHUB_ENV
- name: Update Resource Link SHA
run: |
echo "Auto SHA: $AUTO_SHA"
sed -i "/@icon/ s#/[a-f0-9]\{40\}/#/${AUTO_SHA}/#g" dist/BlueMarble.user.js src/BlueMarble.meta.js
sed -i "/@resource/ s#/[a-f0-9]\{40\}/#/${AUTO_SHA}/#g" dist/BlueMarble.user.js src/BlueMarble.meta.js
echo "Updated resourceLinkSHA:"
grep "@icon" dist/BlueMarble.user.js src/BlueMarble.meta.js
grep "@resource" dist/BlueMarble.user.js src/BlueMarble.meta.js
env:
AUTO_SHA: ${{ env.AUTO_SHA }}
- name: Commit Resource Link SHA
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
git add dist/BlueMarble.user.js
git add src/BlueMarble.meta.js
git commit -m "Merge version; ${{ needs.build.outputs.TITLE }}" -m "${{ needs.build.outputs.BODY }}" || echo "No changes to commit"
git push
- name: Merge Auto -> Main
run: |
git fetch origin
git checkout origin/main -B main
git merge --squash origin/auto
git commit -m "Release version; ${{ needs.build.outputs.TITLE }}" -m "${{ needs.build.outputs.BODY }}" || echo "No changes to commit"
git push origin main