Skip to content

👷 添加自动CI pre-release构建 (#135) #6

👷 添加自动CI pre-release构建 (#135)

👷 添加自动CI pre-release构建 (#135) #6

Workflow file for this run

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:
- "multi" # 正式release,如加版本号
- "preview" # 预构建branch,这里发测试版
- "exp/**" # 新特性branch
- "dev/**" # 修bug的branch
paths:
- '*.gradle'
- '**/gradle.properties'
- '**/src/**'
- '**/versions/**'
- '.github/**'
pull_request:
release:
types:
- published
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: \`${{ github.event.inputs.target_subproject }}\`
- target_release_tag: \`${{ github.event.inputs.target_release_tag }}\`
EOF
matrix_prep:
uses: ./.github/workflows/matrix_prep.yml
with:
target_subproject: ${{ github.event.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/git-get-release-action@1.2.5
env:
GITHUB_TOKEN: ${{ github.token }}
with:
tag: ${{ github.event.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 }} # 是否发release
build_version_type: ${{ steps.build_info.outputs.build_version_type }} # 是beta的pre build还是正式release
publish_channel: ${{ steps.build_info.outputs.publish_channel }} # 和version_type完全对应
publish_target_release_tag: ${{ steps.build_info.outputs.publish_target_release_tag }} # 只有手动触发或者手动发release的时候有
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
if [[ ${{ github.ref_name }} == 'preview' ]]; then
build_publish=true
else
build_publish=false
fi
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
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
build:
if: ${{ contains(github.event.head_commit.message, '[skip]') == false }}
needs:
- prepare_build_info
- validate_release
uses: ./.github/workflows/build.yml
secrets: inherit
with:
target_subproject: ${{ github.event.inputs.target_subproject }}
release: ${{ needs.prepare_build_info.outputs.build_publish }}
build_version_type: ${{ needs.prepare_build_info.outputs.build_version_type }}
publish:
# 当pr或者push到非exp/dev分支的时候,不会触发CI publish
if: ${{ needs.prepare_build_info.outputs.build_publish }}
strategy:
matrix: ${{ fromJson(needs.matrix_prep.outputs.matrix) }}
needs:
- matrix_prep
- build
- prepare_build_info
- prepare_publish_info
uses: ./.github/workflows/publish.yml
secrets: inherit
with:
publish_channel: ${{ needs.prepare_publish_info.outputs.publish_channel }}
publish_target_subproject: ${{ matrix.subproject }}
publish_target_release_tag: ${{ needs.prepare_publish_info.outputs.publish_target_release_tag }}