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 }} CURRENT_VERSION: ${{ steps.get_version.outputs.current_version }} 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: Install Rust for tokei uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal - name: Install tokei run: cargo install tokei --locked - name: Install jq run: sudo apt-get install -y jq - 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: Get latest release tag (no "v" prefix) id: get_latest_tag run: | latest_tag=$(gh release list --limit 1 --exclude-drafts --exclude-pre-releases=false | head -n 1 | awk '{print $1}') latest_tag_no_v=${latest_tag#v} echo "latest_tag_no_v=$latest_tag_no_v" >> $GITHUB_OUTPUT env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Update static version numbers run: | current_version="${{ steps.get_version.outputs.current_version }}" latest_tag="${{ steps.get_latest_tag.outputs.latest_tag_no_v }}" if [ -f "docs/README.md" ]; then echo "README.md exists. Modifying..." sed -i \ -e 's|\(Latest_Version-\)[^-\ ]*\(-lightblue\)|\1'"$current_version"'\2|' \ docs/README.md else echo "README.md was not found. Skipping..." fi - name: Update compression badge run: | dist_size=$(find dist -type f \ ! -name "BlueMarble-Standalone.user.js" \ ! -name "BlueMarble-For-GreasyFork.user.js" \ ! -name "BlueMarble-For-GreasyFork.user.css" \ -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: Update tokei Shields run: | # Run tokei tokei src docs build --output json > tokei.json code_total=$(jq '[.[] | .code] | add' tokei.json) comm_total=$(jq '[.[] | .comments] | add' tokei.json) badge_code="https://img.shields.io/badge/Lines_Of_Code-${code_total}-blue?style=flat" badge_comm="https://img.shields.io/badge/Lines_Of_Comments-${comm_total}-blue?style=flat" echo "Code Badge: $badge_code" echo "Comm Badge: $badge_comm" sed -i -E 's#https://img.shields.io/badge/Lines_Of_Code-[^"]*#'"$badge_code"'#' docs/README.md sed -i -E 's#https://img.shields.io/badge/Lines_Of_Comments-[^"]*#'"$badge_comm"'#' 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<> $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 "v${{ needs.build.outputs.CURRENT_VERSION }}; ${{ needs.build.outputs.TITLE }}" -m "${{ needs.build.outputs.BODY }}" || echo "No changes to commit" git push origin main update-wiki: permissions: contents: write runs-on: ubuntu-latest needs: [update-auto, build, update-requirements] # Needs the update-auto, build, and update-requirements jobs to finish first steps: - name: Checkout main branch uses: actions/checkout@v4 with: fetch-depth: 0 - name: Force update wiki branch run: | git fetch origin git branch -f wiki origin/main git push origin wiki --force - name: Checkout wiki branch run: git checkout wiki - name: Install dependencies run: | npm ci npm install minami taffydb - name: Generate JSDoc from jsdoc.json run: | npx jsdoc -c jsdoc.json - name: Commit and push to wiki branch 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 docs git commit -m "Update wiki via JSDoc" || echo "No changes to commit" git push origin wiki