feat: enhance GitCode release workflow with bootstrap asset and asset matrix

This commit is contained in:
CaIon
2026-07-27 18:20:01 +08:00
parent 2ec6171faa
commit 6d57d250f8
+56 -3
View File
@@ -30,6 +30,8 @@ jobs:
release_tag: ${{ steps.release.outputs.tag }}
release_body: ${{ steps.release.outputs.body }}
release_prerelease: ${{ steps.release.outputs.prerelease }}
bootstrap_asset: ${{ steps.release.outputs.bootstrap_asset }}
release_asset_matrix: ${{ steps.release.outputs.asset_matrix }}
steps:
- name: Wait for GitHub release workflows
if: ${{ github.event_name == 'push' }}
@@ -107,11 +109,39 @@ jobs:
exit 1
fi
while IFS= read -r -d '' file; do
directory="$(dirname "$file")"
filename="$(basename "$file")"
safe_filename="$(sed 's/[^A-Za-z0-9._+-]/-/g' <<< "$filename")"
if [[ "$filename" != "$safe_filename" ]]; then
if [[ -e "$directory/$safe_filename" ]]; then
echo "::error::Asset filename collision after normalization: $safe_filename"
exit 1
fi
mv -- "$file" "$directory/$safe_filename"
fi
done < <(find release-assets -maxdepth 1 -type f -print0)
find release-assets -maxdepth 1 -type f -print | sort
bootstrap_asset="$(
find release-assets -maxdepth 1 -type f -printf '%s\t%f\n' \
| sort -n -k1,1 \
| head -n 1 \
| cut -f2-
)"
asset_matrix="$(
find release-assets -maxdepth 1 -type f -printf '%f\n' \
| sort \
| jq -Rsc --arg bootstrap "$bootstrap_asset" \
'split("\n") | map(select(length > 0 and . != $bootstrap))'
)"
delimiter="release-body-$(openssl rand -hex 16)"
{
echo "tag=$RELEASE_TAG"
echo "bootstrap_asset=$bootstrap_asset"
echo "asset_matrix=$asset_matrix"
echo "body<<$delimiter"
# sync_to_gitcode embeds this input in a single-quoted shell string.
# Replace ASCII apostrophes so release notes cannot break its script.
@@ -128,8 +158,8 @@ jobs:
if-no-files-found: error
retention-days: 1
gitcode-release:
name: Publish GitCode release
gitcode-release-metadata:
name: Publish GitCode release metadata
needs: prepare-release-assets
if: ${{ vars.GITCODE_REPOSITORY != '' }}
uses: nvdacn/sync_to_gitcode/.github/workflows/CreateReleaseOnGitCode.yaml@18b70112d0e62260bc54085028e5510bbc6323b2
@@ -140,6 +170,29 @@ jobs:
tag_name: ${{ needs.prepare-release-assets.outputs.release_tag }}
body: ${{ needs.prepare-release-assets.outputs.release_body }}
prerelease: ${{ needs.prepare-release-assets.outputs.release_prerelease == 'true' }}
file_name: '*'
file_name: ${{ needs.prepare-release-assets.outputs.bootstrap_asset }}
secrets:
GITCODE_TOKEN: ${{ secrets.GITCODE_TOKEN }}
gitcode-release-assets:
name: Publish GitCode asset (${{ matrix.file_name }})
needs:
- prepare-release-assets
- gitcode-release-metadata
if: ${{ vars.GITCODE_REPOSITORY != '' }}
strategy:
fail-fast: false
max-parallel: 4
matrix:
file_name: ${{ fromJSON(needs.prepare-release-assets.outputs.release_asset_matrix) }}
uses: nvdacn/sync_to_gitcode/.github/workflows/CreateReleaseOnGitCode.yaml@18b70112d0e62260bc54085028e5510bbc6323b2
with:
artifact_name: gitcode-release-assets
gitcode_repository: ${{ vars.GITCODE_REPOSITORY }}
default_branch: main
tag_name: ${{ needs.prepare-release-assets.outputs.release_tag }}
body: ${{ needs.prepare-release-assets.outputs.release_body }}
prerelease: ${{ needs.prepare-release-assets.outputs.release_prerelease == 'true' }}
file_name: ${{ matrix.file_name }}
secrets:
GITCODE_TOKEN: ${{ secrets.GITCODE_TOKEN }}