Skip to content

Commit

Permalink
CI Test
Browse files Browse the repository at this point in the history
Signed-off-by: Hendrix-Shen <[email protected]>
  • Loading branch information
Hendrix-Shen committed Apr 19, 2024
1 parent 31913dd commit b53729e
Show file tree
Hide file tree
Showing 9 changed files with 654 additions and 231 deletions.
360 changes: 129 additions & 231 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,255 +5,153 @@ on:
- 'dev/**'
- 'exp/**'
paths:
- "**.gradle"
- "gradle.properties"
- "src/**"
- "versions/**"
- ".github/**"
- '*.gradle'
- 'gradle.properties'
- 'src/**'
- 'versions/**'
- '.github/**'
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:
build:
if: ${{ github.event_name == 'push' && !startsWith(github.event.ref, 'refs/tags/') && contains(github.event.head_commit.message, '[build skip]') == false }}
strategy:
matrix:
java: [ 17 ]
os: [ ubuntu-latest ]
runs-on: ${{ matrix.os }}
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:
uses: ./.github/workflows/generate_matrix.yml
with:
target_subproject: ${{ inputs.target_subproject }}
# Ensure the input target subproject is valid.
validate_target_subproject:
runs-on: ubuntu-latest
steps:
- name: Checkout the sources
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
distribution: 'adopt'
java-version: ${{ matrix.java }}

- name: Cache Gradle packages
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
./.gradle/loom-caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}

- name: Get short commit sha
id: get_short_sha
run: |
short_sha=$(echo ${GITHUB_SHA} | cut -c1-7)
echo "short_sha=$short_sha" >> $GITHUB_OUTPUT
- name: Get commit count
id: get_commit_count
run: |
commit_count=$(git log | grep -e '^commit [a-zA-Z0-9]*' | wc -l)
echo "commit_count=$commit_count" >> $GITHUB_OUTPUT
- name: Read Properties mod info
id: mod_info
uses: christian-draeger/[email protected]
with:
path: gradle.properties
properties: 'mod_name mod_version'

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Preprocess sources
- 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:
BUILD_TYPE: "BETA"
run: ./gradlew preprocessResources --stacktrace

- name: Publish Maven with Gradle
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:
BUILD_TYPE: "BETA"
MAVEN_CENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
SIGNING_PGP_KEY: ${{ secrets.SIGNING_PGP_KEY }}
run: ./gradlew build publish -x test --stacktrace

- name: Upload assets to GitHub Action
uses: actions/upload-artifact@v4
with:
name: ${{ steps.mod_info.outputs.mod_name }} ${{ steps.mod_info.outputs.mod_version }}.${{ steps.get_commit_count.outputs.commit_count }}+${{ steps.get_short_sha.outputs.short_sha }}
path: |
LICENSE
fabricWrapper/build/libs/*.jar
fabricWrapper/build/tmp/submods/META-INF/jars/*.jar
- name: Create Github release
if: contains(github.event.head_commit.message, '[publish skip]') == false && contains(github.event.ref, 'refs/heads/exp') == false
uses: softprops/action-gh-release@v1
GITHUB_TOKEN: ${{ github.token }}
with:
prerelease: true
files: |
LICENSE
fabricWrapper/build/libs/*.jar
fabricWrapper/build/tmp/submods/META-INF/jars/*.jar
name: "[CI#${{ github.run_number }}]${{ steps.mod_info.outputs.mod_name }} ${{ steps.mod_info.outputs.mod_version }}.${{ steps.get_commit_count.outputs.commit_count }}+${{ steps.get_short_sha.outputs.short_sha }}"
tag_name: "${{ github.ref_name }}.${{ steps.get_commit_count.outputs.commit_count }}"
target_commitish: ${{ github.event.ref }}
generate_release_notes: true

publish:
if: ${{ github.event_name == 'release' }}
strategy:
matrix:
java: [ 17 ]
os: [ ubuntu-latest ]
runs-on: ${{ matrix.os }}

tag: ${{ inputs.target_release_tag }}
prepare_build_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_type: ${{ steps.build_info.outputs.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: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
distribution: 'adopt'
java-version: ${{ matrix.java }}

- name: Cache Gradle packages
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
./.gradle/loom-caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle', 'gradle.properties', '**/*.accesswidener') }}
restore-keys: ${{ runner.os }}-gradle-

- name: Get short commit sha
id: get_short_sha
run: |
short_sha=$(echo ${GITHUB_SHA} | cut -c1-7)
echo "short_sha=$short_sha" >> $GITHUB_OUTPUT
- name: Get commit count
id: get_commit_count
- name: Determining build info
id: build_info
run: |
commit_count=$(git log | grep -e '^commit [a-zA-Z0-9]*' | wc -l)
echo "commit_count=$commit_count" >> $GITHUB_OUTPUT
- name: Read Properties mod info
id: mod_info
uses: christian-draeger/[email protected]
with:
path: gradle.properties
properties: 'mod_name mod_version'

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Preprocess sources
env:
BUILD_TYPE: "RELEASE"
run: ./gradlew preprocessResources --stacktrace

- name: Publish Maven with Gradle
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:
BUILD_TYPE: "RELEASE"
MAVEN_CENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
SIGNING_PGP_KEY: ${{ secrets.SIGNING_PGP_KEY }}
run: ./gradlew build publish -x test --stacktrace

- name: Upload assets to GitHub Action
uses: actions/upload-artifact@v4
with:
name: ${{ steps.mod_info.outputs.mod_name }} ${{ steps.mod_info.outputs.mod_version }}.${{ steps.get_commit_count.outputs.commit_count }}+${{ steps.get_short_sha.outputs.short_sha }}
path: |
LICENSE
fabricWrapper/build/libs/*.jar
fabricWrapper/build/tmp/submods/META-INF/jars/*.jar
- name: Upload assets Github Release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ github.event.ref }}
files: |
LICENSE
fabricWrapper/build/libs/*.jar
fabricWrapper/build/tmp/submods/META-INF/jars/*.jar
- name: Publish release to CurseForge & Modrinth
uses: Kir-Antipov/[email protected]
with:
modrinth-id: mv1zH6ln
modrinth-token: ${{ secrets.MODRINTH_API_TOKEN }}
curseforge-id: 576459
curseforge-token: ${{ secrets.CF_API_TOKEN }}
files: |
fabricWrapper/build/libs/!(*-@(dev|sources|javadoc)).jar
fabricWrapper/build/tmp/submods/META-INF/jars/!(*-@(dev|sources)).jar
name: 'MagicLib ${{ steps.mod_info.outputs.mod_version }}.${{ steps.get_commit_count.outputs.commit_count }}'
version: ${{ steps.mod_info.outputs.mod_version }}.${{ steps.get_commit_count.outputs.commit_count }}
version-type: 'release'
changelog: ${{ github.event.release.body }}
loaders: |
fabric
quilt
game-versions: |
1.14.4
1.15.2
1.16.5
1.17.1
1.18.2
1.19.2
1.19.3
1.19.4
1.20.1
1.20.2
game-version-filter: any
java: |
8
9
10
11
12
13
14
15
16
17
18
dependencies: |
carpet(optional)
malilib(optional)
retry-attempts: 2
retry-delay: 10000

pull_request:
if: ${{ github.event_name == 'pull_request' }}
TARGET_SUBPROJECT: ${{ github.event.inputs.target_subproject }}
build:
if: ${{ contains(github.event.head_commit.message, '[build skip]') == false }}
needs:
- prepare_build_info
- validate_target_subproject
- validate_release
uses: ./.github/workflows/build.yml
secrets: inherit
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 }}
publish:
if: ${{ needs.build.outputs.build_publish }}
strategy:
matrix:
java: [ 17 ]
os: [ ubuntu-20.04 ]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout the sources
uses: actions/checkout@v4

- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
distribution: 'adopt'
java-version: ${{ matrix.java }}

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Preprocess sources
run: ./gradlew preprocessResources --stacktrace

- name: Build with Gradle
run: ./gradlew build --stacktrace
matrix: ${{ fromJson(needs.generate_matrix.outputs.matrix) }}
needs:
- build
- generate_matrix
- prepare_build_info
uses: ./.github/workflows/publish.yml
secrets: inherit
with:
build_publish: ${{ needs.prepare_build_info.outputs.build_publish }}
build_version_type: ${{ needs.prepare_build_info.outputs.build_version_type }}
publish_channel: ${{ needs.prepare_build_info.outputs.publish_channel }}
publish_target_release_tag: ${{ needs.prepare_build_info.outputs.publish_target_release_tag }}
Loading

0 comments on commit b53729e

Please sign in to comment.