Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rewrite CI logic #145

Merged
merged 1 commit into from
Jan 1, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
174 changes: 21 additions & 153 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
@@ -1,170 +1,38 @@
name: CI
# release: <default> (release title)
# dispatch (all): Manual release for $target_release_tag
# dispatch (specified): Manual release for $target_release_tag (subproject: $target_subproject)
run-name: |-
${{ github.event_name == 'workflow_dispatch' && format('Manual release for {0}{1}', inputs.target_release_tag, inputs.target_subproject && format(' (subproject: {0})', inputs.target_subproject) || '') || '' }}
on:
push:
branches:
- 'dev'
paths:
- "*.gradle"
- "gradle.properties"
- "src/**"
- "versions/**"
- ".github/**"
- '**/*.gradle'
- '**/gradle.properties'
- '**/src/**'
- '**/versions/**'
- '.github/**'
pull_request:
release:
types:
- published
pull_request:
workflow_dispatch:
inputs:
target_subproject:
description: |-
The subproject name(s) of the specified Minecraft version to be released, seperated with ",".
By default all subprojects will be released.
type: string
required: false
default: ''
target_release_tag:
description: |-
The tag of the release you want to append the artifact to.
type: string
required: true
jobs:
show_action_parameters:
runs-on: ubuntu-latest
steps:
- name: Show action parameters
run: |
cat <<EOF > $GITHUB_STEP_SUMMARY
## Action Parameters
- target_subproject: \`${{ inputs.target_subproject }}\`
- target_release_tag: \`${{ inputs.target_release_tag }}\`
EOF
generate_matrix:
if: ${{ github.event_name != 'pull_request' }}
uses: ./.github/workflows/generate_matrix.yml
with:
target_subproject: ${{ inputs.target_subproject }}
validate_target_subproject:
runs-on: ubuntu-latest
steps:
- name: Checkout the sources
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Validate target subproject
if: ${{ github.event_name == 'workflow_dispatch' }}
# ubuntu-22.04 uses Python 3.10.6
run: python3 .github/workflows/scripts/validate_subproject.py
env:
TARGET_SUBPROJECT: ${{ inputs.target_subproject }}
# Ensure the input release tag is valid.
validate_release:
runs-on: ubuntu-latest
steps:
- name: Get github release information
if: ${{ github.event_name == 'workflow_dispatch' }}
uses: cardinalby/[email protected]
env:
GITHUB_TOKEN: ${{ github.token }}
with:
tag: ${{ inputs.target_release_tag }}
prepare_build_info:
prepare_action_info:
if: ${{ !startsWith(github.event.ref, 'refs/tags/') }}
runs-on: ubuntu-latest
outputs:
build_publish: ${{ steps.build_info.outputs.build_publish }}
build_target_subprojects: ${{ steps.subprojects.outputs.subprojects }}
build_version_type: ${{ steps.build_info.outputs.build_version_type }}
publish_channel: ${{ steps.build_info.outputs.publish_channel }}
publish_target_release_tag: ${{ steps.build_info.outputs.publish_target_release_tag }}
steps:
- name: Checkout the sources
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Determining build info
id: build_info
run: |
if [ ${{ github.event_name }} == 'push' ]
then
build_publish=true
build_version_type=BETA
publish_channel=dev
elif [ ${{ github.event_name }} == 'release' ]
then
build_publish=true
build_version_type=RELEASE
publish_channel=stable
publish_target_release_tag=${{ github.event.ref }}
elif [ ${{ github.event_name }} == 'pull_request' ]
then
build_publish=false
build_version_type=PULL_REQUEST
elif [ ${{ github.event_name }} == 'workflow_dispatch' ]
then
build_publish=true
build_version_type=RELEASE
publish_channel=stable
publish_target_release_tag=${{ inputs.target_release_tag }}
else
echo Unknown github event name $GITHUB_EVENT_NAME
exit 1
fi

echo "build_publish=$build_publish" >> $GITHUB_OUTPUT
echo "build_version_type=$build_version_type" >> $GITHUB_OUTPUT
echo "publish_channel=$publish_channel" >> $GITHUB_OUTPUT
echo "publish_target_release_tag=$publish_target_release_tag" >> $GITHUB_OUTPUT

cat <<EOF > $GITHUB_STEP_SUMMARY
## Determining build info
- build_publish: \`$build_publish\`
- build_version_type: \`$build_version_type\`
- publish_channel: \`$publish_channel\`
- publish_target_release_tag: \`$publish_target_release_tag\`
EOF
- name: Determining subprojects
id: subprojects
run: python3 .github/workflows/scripts/determining_subproject.py
env:
TARGET_SUBPROJECT: ${{ github.event.inputs.target_subproject }}
prepare_publish_info:
if: ${{ needs.prepare_build_info.outputs.build_publish == 'true' }}
runs-on: ubuntu-latest
needs:
- prepare_build_info
outputs:
publish_channel: ${{ needs.prepare_build_info.outputs.publish_channel }}
publish_target_release_tag: ${{ needs.prepare_build_info.outputs.publish_target_release_tag }}
steps:
- name: Checkout the sources
uses: actions/checkout@v4
uses: ./.github/workflows/prepare_action_info.yml
build:
if: ${{ contains(github.event.head_commit.message, '[build skip]') == false }}
needs:
- prepare_build_info
- validate_target_subproject
- validate_release
if: ${{ !contains(github.event.head_commit.message, '[build skip]') }}
uses: ./.github/workflows/build.yml
secrets: inherit
needs:
- prepare_action_info
with:
build_publish: ${{ needs.prepare_build_info.outputs.build_publish }}
build_version_type: ${{ needs.prepare_build_info.outputs.build_version_type }}
target_subproject: ${{ needs.prepare_build_info.outputs.build_target_subprojects }}
build_publish: ${{ fromJSON(needs.prepare_action_info.outputs.build_publish) }}
build_version_type: ${{ needs.prepare_action_info.outputs.build_version_type }}
publish:
if: ${{ github.event_name != 'pull_request' }}
strategy:
matrix: ${{ fromJson(needs.generate_matrix.outputs.matrix) }}
needs:
- build
- generate_matrix
- prepare_publish_info
if: ${{ fromJSON(needs.prepare_action_info.outputs.publish_enable) }}
uses: ./.github/workflows/publish.yml
secrets: inherit
needs:
- build
- prepare_action_info
with:
publish_channel: ${{ needs.prepare_publish_info.outputs.publish_channel }}
publish_mc_ver: ${{ matrix.mc_ver }}
publish_platform: ${{ matrix.platform }}
publish_target_release_tag: ${{ needs.prepare_publish_info.outputs.publish_target_release_tag }}
publish_platform_channel: ${{ needs.prepare_action_info.outputs.publish_platform_channel }}
publish_type: ${{ needs.prepare_action_info.outputs.publish_type }}
58 changes: 33 additions & 25 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,21 +1,18 @@
name: step.build
name: _step.build
on:
workflow_call:
inputs:
build_publish:
type: string
required: true
type: boolean
default: false
required: false
build_version_type:
type: string
required: true
target_subproject:
description: see CI.yml, leave it empty to build all
type: string
default: 'DEV'
required: false
default: ''
jobs:
build:
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
steps:
- name: Checkout the sources
uses: actions/checkout@v4
Expand All @@ -26,8 +23,9 @@ jobs:
with:
distribution: 'temurin'
java-version: 21
- name: Validate gradle wrapper
uses: gradle/actions/wrapper-validation@v4
- name: Cache gradle files
if: ${{ inputs.build_version_type != 'PULL_REQUEST' }}
uses: actions/cache@v4
with:
path: |
Expand All @@ -37,26 +35,35 @@ jobs:
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle', '**/gradle.properties', '**/*.accesswidener', 'settings.json') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build with gradle
- name: Build and publish with gradle
if: ${{ inputs.build_publish == true }}
run: |
./gradlew build publish -x test --stacktrace
env:
BUILD_TYPE: ${{ inputs.build_version_type }}
NYAN_MAVEN_PASSWORD: ${{ secrets.NYAN_MAVEN_PASSWORD }}
NYAN_MAVEN_USERNAME: ${{ secrets.NYAN_MAVEN_USERNAME }}
SIGNING_PGP_KEY: ${{ secrets.SIGNING_PGP_KEY }}
- name: Build and publishToMavenLocal with gradle
if: ${{ inputs.build_publish == false }}
run: |
chmod +x gradlew
if [ -z "${{ inputs.target_subproject }}" ]; then
echo "Building all subprojects"
./gradlew build
else
args=$(echo "${{ inputs.target_subproject }}" | tr ',' '\n' | sed 's/$/:build/' | paste -sd ' ')
echo "Building with arguments=$args"
./gradlew $args
fi
./gradlew build publishToMavenLocal -x test --stacktrace
env:
BUILD_TYPE: ${{ inputs.build_version_type }}
- name: Upload artifacts
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: build-artifacts
path: versions/*/build/libs/
path: |
*/**/build/libs/
*/**/build/tmp/submods/
- name: Upload MavenLocal
uses: actions/upload-artifact@v4
with:
name: Maven Local
path: ~/.m2/repository/com/plusls/
summary:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
needs:
- build
steps:
Expand All @@ -70,5 +77,6 @@ jobs:
name: build-artifacts
path: build-artifacts
- name: Make build summary
# ubuntu-22.04 uses Python 3.10.6
run: python3 .github/workflows/scripts/summary.py
run: |
pip install jproperties
python .github/workflows/scripts/summary.py
19 changes: 6 additions & 13 deletions .github/workflows/generate_matrix.yml
Original file line number Diff line number Diff line change
@@ -1,29 +1,22 @@
name: step.generate_matrix
name: _step.generate_matrix
on:
workflow_call:
inputs:
target_subproject:
description: see CI.yml, for generating matrix entries
type: string
required: false
default: ''
outputs:
matrix:
description: The generated run matrix
value: ${{ jobs.generate_matrix.outputs.matrix }}
jobs:
generate_matrix:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- name: Checkout the sources
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Generate matrix
id: generate_matrix
# ubuntu-22.04 uses Python 3.10.6
run: python3 .github/workflows/scripts/matrix.py
env:
TARGET_SUBPROJECT: ${{ inputs.target_subproject }}
run: |
pip install jproperties
python .github/workflows/scripts/matrix.py
outputs:
matrix: ${{ steps.generate_matrix.outputs.matrix }}
matrix: ${{ steps.generate_matrix.outputs.matrix }}
Loading