feat: enhance GitCode release workflow with bootstrap asset and asset matrix
This commit is contained in:
@@ -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 }}
|
||||
|
||||
Reference in New Issue
Block a user