Skip to content

Commit

Permalink
Rewrite CI logic
Browse files Browse the repository at this point in the history
Signed-off-by: Hendrix-Shen <[email protected]>
  • Loading branch information
Hendrix-Shen committed Dec 14, 2024
1 parent 78a467a commit b22feba
Show file tree
Hide file tree
Showing 89 changed files with 577 additions and 510 deletions.
162 changes: 15 additions & 147 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
@@ -1,171 +1,39 @@
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/**'
- 'exp/**'
paths:
- '**/*.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
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.repository_owner }} != 'Hendrix-Shen' ]
then
build_publish=true
build_version_type=FORK
publish_channel=fork
elif [ ${{ 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
with:
fetch-depth: 0
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' }}
needs:
- build
- 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_target_release_tag: ${{ needs.prepare_publish_info.outputs.publish_target_release_tag }}
target_subproject: ${{ inputs.target_subproject }}
publish_platform_channel: ${{ needs.prepare_action_info.outputs.publish_platform_channel }}
publish_type: ${{ needs.prepare_action_info.outputs.publish_type }}
62 changes: 25 additions & 37 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,13 @@ 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
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 @@ -44,44 +42,35 @@ jobs:
./gradlew preprocessResources
env:
BUILD_TYPE: ${{ inputs.build_version_type }}
- name: Build with gradle
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
env:
BUILD_TYPE: ${{ inputs.build_version_type }}
- name: Publish with gradle
if: ${{ inputs.build_publish == 'true' }}
- name: Build and publish with gradle
if: ${{ inputs.build_publish == true }}
run: |
if [ -z "${{ inputs.target_subproject }}" ]; then
echo "Publishing all subprojects"
./gradlew publish
else
args=$(echo "${{ inputs.target_subproject }}" | tr ',' '\n' | sed 's/$/:publish/' | paste -sd ' ')
echo "Publishing with arguments=$args"
./gradlew $args
fi
./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: Upload artifacts
- name: Build and publishToMavenLocal with gradle
if: ${{ inputs.build_publish == false }}
run: |
./gradlew build publishToMavenLocal -x test --stacktrace
env:
BUILD_TYPE: ${{ inputs.build_version_type }}
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: build-artifacts
path: |
*/**/build/libs/
*/**/build/tmp/submods/
- name: Upload MavenLocal
uses: actions/upload-artifact@v4
with:
name: Maven Local
path: ~/.m2/repository/top/hendrixshen/
summary:
runs-on: ubuntu-24.04
runs-on: ubuntu-latest
needs:
- build
steps:
Expand All @@ -95,7 +84,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
env:
TARGET_SUBPROJECT: ${{ inputs.target_subproject }}
run: |
pip install jproperties
python .github/workflows/scripts/summary.py
15 changes: 4 additions & 11 deletions .github/workflows/generate_matrix.yml
Original file line number Diff line number Diff line change
@@ -1,29 +1,22 @@
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-24.04
runs-on: ubuntu-latest
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 }}
Loading

0 comments on commit b22feba

Please sign in to comment.