Files
wehub-resource-sync 1d1286fadb
Build / Build and test (push) Waiting to run
chore: import upstream snapshot with attribution
2026-07-13 13:18:38 +08:00

209 lines
6.1 KiB
YAML

name: Prepare Release
on:
workflow_dispatch:
inputs:
type:
description: "Release type"
required: true
default: app
type: choice
options:
- app
- plugin
version:
description: "Target version without prefix, for example 1.0.7"
required: true
type: string
release:
description: "Trigger release workflow after tag is pushed"
required: true
default: true
type: boolean
plugin_mode:
description: "Plugin release mode"
required: false
default: auto
type: choice
options:
- auto
- selected
- all
plugins:
description: "Comma-separated plugin IDs or directory names when plugin_mode=selected"
required: false
type: string
permissions:
contents: write
actions: write
concurrency:
group: prepare-release-${{ inputs.type }}
cancel-in-progress: false
jobs:
prepare:
name: Prepare ${{ inputs.type }} release
runs-on: macos-26
timeout-minutes: 45
env:
CI_BUNDLE_IDENTIFIER_PREFIX: dev.mactools.ci
steps:
- name: Checkout main
uses: actions/checkout@v5
with:
ref: main
fetch-depth: 0
- name: Ensure main branch
run: git checkout main
- name: Validate inputs
env:
INPUT_TYPE: ${{ inputs.type }}
INPUT_VERSION: ${{ inputs.version }}
INPUT_PLUGIN_MODE: ${{ inputs.plugin_mode }}
INPUT_PLUGINS: ${{ inputs.plugins }}
run: |
set -euo pipefail
if [[ ! "$INPUT_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "version must look like 1.2.3 and must not include v or plugins-." >&2
exit 1
fi
if [[ "$INPUT_TYPE" == "app" ]]; then
if [[ "$INPUT_PLUGIN_MODE" != "auto" || -n "$INPUT_PLUGINS" ]]; then
echo "plugin_mode/plugins are only valid for plugin releases." >&2
exit 1
fi
elif [[ "$INPUT_TYPE" == "plugin" ]]; then
if [[ "$INPUT_PLUGIN_MODE" != "selected" && -n "$INPUT_PLUGINS" ]]; then
echo "plugins input is only valid when plugin_mode=selected." >&2
exit 1
fi
if [[ "$INPUT_PLUGIN_MODE" == "selected" && -z "$INPUT_PLUGINS" ]]; then
echo "plugins input is required when plugin_mode=selected." >&2
exit 1
fi
else
echo "Unknown type: $INPUT_TYPE" >&2
exit 1
fi
- name: Show Xcode version
run: xcodebuild -version
- name: Install XcodeGen
run: |
if ! command -v xcodegen >/dev/null 2>&1; then
brew install xcodegen
fi
- name: Write CI local config
run: |
cat > LocalConfig.xcconfig <<EOF
DEVELOPMENT_TEAM =
BUNDLE_IDENTIFIER_PREFIX = ${CI_BUNDLE_IDENTIFIER_PREFIX}
EOF
- name: Configure git author
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
- name: Prepare app release
if: inputs.type == 'app'
env:
INPUT_VERSION: ${{ inputs.version }}
run: |
set -euo pipefail
scripts/release.py \
--type app \
--version "$INPUT_VERSION" \
--yes
{
echo "RELEASE_TAG=v${INPUT_VERSION}"
echo "RELEASE_WORKFLOW=release.yml"
} >> "$GITHUB_ENV"
- name: Prepare plugin release
if: inputs.type == 'plugin'
env:
INPUT_VERSION: ${{ inputs.version }}
INPUT_PLUGIN_MODE: ${{ inputs.plugin_mode }}
INPUT_PLUGINS: ${{ inputs.plugins }}
run: |
set -euo pipefail
release_args=(
--type plugin
--version "$INPUT_VERSION"
--plugin-mode "$INPUT_PLUGIN_MODE"
--yes
)
if [[ -n "$INPUT_PLUGINS" ]]; then
release_args+=(--plugin "$INPUT_PLUGINS")
fi
scripts/release.py "${release_args[@]}"
{
echo "RELEASE_TAG=plugins-${INPUT_VERSION}"
echo "RELEASE_WORKFLOW=plugin-release.yml"
} >> "$GITHUB_ENV"
- name: Write summary
env:
INPUT_TYPE: ${{ inputs.type }}
INPUT_VERSION: ${{ inputs.version }}
INPUT_RELEASE: ${{ inputs.release }}
INPUT_PLUGIN_MODE: ${{ inputs.plugin_mode }}
INPUT_PLUGINS: ${{ inputs.plugins }}
run: |
{
echo "## Prepare release"
echo ""
echo "- Type: \`${INPUT_TYPE}\`"
echo "- Version: \`${INPUT_VERSION}\`"
echo "- Tag: \`${RELEASE_TAG}\`"
echo "- Trigger release workflow: \`${INPUT_RELEASE}\`"
if [[ "$INPUT_TYPE" == "plugin" ]]; then
echo "- Plugin mode: \`${INPUT_PLUGIN_MODE}\`"
if [[ -n "$INPUT_PLUGINS" ]]; then
echo "- Plugins: \`${INPUT_PLUGINS}\`"
fi
fi
} >> "$GITHUB_STEP_SUMMARY"
- name: Trigger release workflow
if: inputs.release
env:
GH_TOKEN: ${{ github.token }}
INPUT_TYPE: ${{ inputs.type }}
INPUT_PLUGIN_MODE: ${{ inputs.plugin_mode }}
INPUT_PLUGINS: ${{ inputs.plugins }}
run: |
set -euo pipefail
if [[ "$INPUT_TYPE" == "app" ]]; then
gh workflow run "$RELEASE_WORKFLOW" --ref main -f tag="$RELEASE_TAG"
else
workflow_args=(
--ref main
-f tag="$RELEASE_TAG"
-f mode="$INPUT_PLUGIN_MODE"
-f prerelease=false
)
if [[ -n "$INPUT_PLUGINS" ]]; then
workflow_args+=(-f plugins="$INPUT_PLUGINS")
fi
gh workflow run "$RELEASE_WORKFLOW" "${workflow_args[@]}"
fi
echo "Triggered ${RELEASE_WORKFLOW} for ${RELEASE_TAG}."