Files
Shiroha/.github/workflows/build.yml
T
Bacteria 5ce33501cd CI: refine build numbering, release/publish flow
Compute BUILD_NUMBER relative to the last gradle.properties mcVersion change (instead of total commits), add dependabot groups for actions and gradle deps, and simplify release notes formatting (disable generated notes and inline metadata). Remove the Publish-To-Repo step from the main build workflow and add a force-push input/conditional to publish-api workflow. Invoke scripts/SetENV.sh in publish-api and update SetENV.sh to produce jar names that omit run attempt suffix for first run. These changes tighten publishing controls and make build numbering reflect per-version increments.
2026-07-09 20:18:43 +08:00

200 lines
7.3 KiB
YAML

name: Camellia CI
on:
push:
branches:
- "**"
workflow_dispatch:
inputs:
force-release:
description: "Force disable release if you enter false, force release if you enter true, default release if not released else skip release"
required: false
default: ""
comments:
description: "Add comments to release"
required: false
default: ""
permissions: write-all
jobs:
build:
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
steps:
- name: Checkout Git Repository
uses: actions/checkout@v7
with:
fetch-depth: 0
submodules: recursive
- name: Get Branch Build Number
run: |
MC_VERSION=$(grep "^[[:space:]]*mcVersion" gradle.properties | cut -d'=' -f2 | sed 's/^[[:space:]]*//; s/\r//')
BASE_COMMIT=$(git log -S "mcVersion=$MC_VERSION" -1 --format="%H" -- gradle.properties)
if [ -z "$BASE_COMMIT" ]; then
BUILD_NUMBER=$(git rev-list --count HEAD)
else
BUILD_NUMBER=$(git rev-list --count $BASE_COMMIT..HEAD)
BUILD_NUMBER=$((BUILD_NUMBER + 1))
fi
echo "BUILD_NUMBER=$BUILD_NUMBER" >> $GITHUB_ENV
echo "Branch: $GITHUB_REF_NAME — Build #$BUILD_NUMBER"
- name: Validate Gradle Wrapper
uses: gradle/actions/wrapper-validation@v6
- name: Set Up JDK
uses: actions/setup-java@v5
with:
distribution: zulu
java-version: 25
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
with:
add-job-summary: never
cache-read-only: false
- name: Configure Git User Details
run: git config --global user.email "ci@monnairealms.moe" && git config --global user.name "Camellia CI"
- name: Grant Execute Permission
run: chmod +x gradlew
- name: Apply Patches
run: ./gradlew applyAllPatches --stacktrace
- name: Build
run: ./gradlew createPaperclipJar --stacktrace
- name: Set Environment
run: sh scripts/SetENV.sh
- name: Get Build Info
id: build-info
run: |
BUILD_DATE=$(date -u +'%Y-%m-%d %H:%M:%S UTC')
echo "build_date=$BUILD_DATE" >> $GITHUB_ENV
- name: Upload Artifact
uses: actions/upload-artifact@v7
with:
name: ${{ env.project_id_b || 'Camellia' }} CI Artifacts
path: ${{ env.jar_dir }}
if-no-files-found: warn
# ── Release ──
- name: Check If Release Exists
if: env.flag_release == 'true'
run: |
git fetch --tags
if [ -n "$(git tag -l "${{ env.tag }}")" ]; then
echo "Release already exists"
release_exists=true
else
echo "Release does not exist"
release_exists=false
fi
if [ "$release_exists" == "true" ]; then
counter=1
while [ -n "$(git tag -l "${{ env.tag }}-${counter}")" ]; do
counter=$((counter + 1))
done
echo "tag=${{ env.tag }}-${counter}" >> $GITHUB_ENV
echo "release_count= - ${counter}" >> $GITHUB_ENV
release_exists=false
fi
echo "release_exists=${release_exists}" >> $GITHUB_ENV
- name: Check If Branch In Expectations
if: env.flag_release == 'true'
run: |
if [[ "$GITHUB_REF_NAME" == ver/* ]] || [[ "$GITHUB_REF_NAME" == exp/* ]] || [[ "$GITHUB_REF_NAME" == dev/* ]]; then
echo "Branch is in expected prefixes"
echo "unexpect=false" >> $GITHUB_ENV
else
echo "Branch is NOT in expected prefixes"
echo "unexpect=true" >> $GITHUB_ENV
fi
- name: Create Release - Pre Process
if: |
( !( env.unexpect == 'true' )
&& env.flag_release == 'true'
&& env.release_exists != 'true'
&& !(inputs.force-release == 'false')
) || inputs.force-release == 'true'
run: |
if [ "${{ inputs.comments }}" == "" ]; then
echo "No comments provided"
echo "flag_comment=false" >> $GITHUB_ENV
else
echo "Comments provided: ${{ inputs.comments }}"
echo "flag_comment=true" >> $GITHUB_ENV
fi
- name: Create Release - No Comment
if: env.flag_comment == 'false'
uses: ncipollo/release-action@v1
with:
tag: ${{ env.tag }}
name: ${{ env.project_id_b }} ${{ env.mcversion }} - ${{ env.commit_id }}${{ env.release_count }}
body: |
[![Download](https://img.shields.io/github/downloads/${{ github.repository }}/${{ env.tag }}/total?color=f472b6&style=for-the-badge&logo=github)](https://github.com/${{ github.repository }}/releases/download/${{ env.tag }}/${{ env.jar }})
### 📝 Build Information
* **Build:** #${{ env.BUILD_NUMBER }}
* **Date:** ${{ env.build_date }}
* **Branch:** [${{ github.ref_name }}](https://github.com/${{ github.repository }}/tree/${{ github.ref_name }})
* **Commit:** [${{ env.commit_id }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }})
### ✨ Latest Changes
${{ env.commit_msg }}
---
> 🤖 Automated release by [Camellia CI](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
artifacts: ${{ env.jar_dir }}
generateReleaseNotes: false
prerelease: ${{ env.pre }}
makeLatest: ${{ env.make_latest }}
token: ${{ secrets.GITHUB_TOKEN }}
- name: Create Release - With Comment
if: env.flag_comment == 'true'
uses: ncipollo/release-action@v1
with:
tag: ${{ env.tag }}
name: ${{ env.project_id_b }} ${{ env.mcversion }} - ${{ env.commit_id }}${{ env.release_count }}
body: |
[![Download](https://img.shields.io/github/downloads/${{ github.repository }}/${{ env.tag }}/total?color=f472b6&style=for-the-badge&logo=github)](https://github.com/${{ github.repository }}/releases/download/${{ env.tag }}/${{ env.jar }})
> **💡 Note:** ${{ inputs.comments }}
### 📝 Build Information
* **Build:** #${{ env.BUILD_NUMBER }}
* **Date:** ${{ env.build_date }}
* **Branch:** [${{ github.ref_name }}](https://github.com/${{ github.repository }}/tree/${{ github.ref_name }})
* **Commit:** [${{ env.commit_id }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }})
### ✨ Latest Changes
${{ env.commit_msg }}
---
> 🤖 Automated release by [Camellia CI](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
artifacts: ${{ env.jar_dir }}
generateReleaseNotes: false
prerelease: ${{ env.pre }}
makeLatest: ${{ env.make_latest }}
token: ${{ secrets.GITHUB_TOKEN }}
event_file:
name: "Event File"
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
runs-on: ubuntu-latest
steps:
- name: Upload
uses: actions/upload-artifact@v7
with:
name: Event File
path: ${{ github.event_path }}