ci: add debug logs #45
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release Mod | |
on: | |
push: | |
branches: | |
- '*' | |
jobs: | |
release: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '20.x' | |
- name: Install dependencies | |
run: npm install -g conventional-changelog-cli semver | |
- name: Determine next version | |
id: determine_version | |
run: | | |
CURRENT_VERSION=$(jq -r .version info.json) | |
echo "Current version: $CURRENT_VERSION" | |
# Use conventional-changelog to get the raw changelog output | |
CHANGELOG_OUTPUT=$(conventional-changelog -p angular --dry-run -r 0) | |
echo "Conventional Changelog Output:" | |
echo "$CHANGELOG_OUTPUT" | |
# Extract the commit types from the changelog output | |
COMMIT_TYPES=$(echo "$CHANGELOG_OUTPUT" | grep -oE '^(feat|fix|chore|perf|docs|refactor)\(.*\):' | sed 's/(.*)//' | sort -u) | |
echo "Commit types: $COMMIT_TYPES" | |
# Determine the next version based on commit types | |
NEXT_VERSION=$CURRENT_VERSION | |
if [[ "$COMMIT_TYPES" == *"feat"* ]]; then | |
NEXT_VERSION=$(semver -i major "$CURRENT_VERSION") | |
elif [[ "$COMMIT_TYPES" == *"fix"* ]]; then | |
NEXT_VERSION=$(semver -i minor "$CURRENT_VERSION") | |
elif [[ "$COMMIT_TYPES" != "" ]]; then | |
NEXT_VERSION=$(semver -i patch "$CURRENT_VERSION") | |
fi | |
if [[ "$NEXT_VERSION" == "$CURRENT_VERSION" ]]; then | |
echo "::warning::No version bump detected, exiting workflow." | |
exit 1 | |
fi | |
echo "Next version: $NEXT_VERSION" | |
echo "new_version=$NEXT_VERSION" >> $GITHUB_OUTPUT | |
echo "NEXT_VERSION=$NEXT_VERSION" >> $GITHUB_ENV | |
- name: Generate changelog entry | |
id: generate_changelog | |
run: | | |
CHANGELOG=$(conventional-changelog -p angular -i changelog.txt -s) | |
# Format the changelog to match Factorio's format | |
FORMATTED_CHANGELOG="---------------------------------------------------------------------------------------------------\nVersion: $NEXT_VERSION\nDate: $(date +%Y-%m-%d)\n" | |
# Initialize categories | |
FEATURES="" | |
BUGFIXES="" | |
CHANGES="" | |
OPTIMIZATIONS="" | |
INFO="" | |
# Map conventional commit types to Factorio changelog categories | |
while IFS= read -r line; do | |
if [[ "$line" =~ ^feat\(.*?\): ]]; then | |
MESSAGE=$(echo "$line" | sed 's/^feat([^)]*\): //') | |
FEATURES+=" - $MESSAGE\n" | |
elif [[ "$line" =~ ^fix\(.*?\): ]]; then | |
MESSAGE=$(echo "$line" | sed 's/^fix([^)]*\): //') | |
BUGFIXES+=" - $MESSAGE\n" | |
elif [[ "$line" =~ ^chore\(.*?\): ]]; then | |
MESSAGE=$(echo "$line" | sed 's/^chore([^)]*\): //') | |
CHANGES+=" - $MESSAGE\n" | |
elif [[ "$line" =~ ^perf\(.*?\): ]]; then | |
MESSAGE=$(echo "$line" | sed 's/^perf([^)]*\): //') | |
OPTIMIZATIONS+=" - $MESSAGE\n" | |
elif [[ "$line" =~ ^docs\(.*?\): ]]; then | |
MESSAGE=$(echo "$line" | sed 's/^docs([^)]*\): //') | |
INFO+=" - $MESSAGE\n" | |
elif [[ "$line" =~ ^refactor\(.*?\): ]]; then | |
MESSAGE=$(echo "$line" | sed 's/^refactor([^)]*\): //') | |
CHANGES+=" - $MESSAGE\n" | |
fi | |
done <<< "$CHANGELOG" | |
# Add categories to the formatted changelog if they have entries | |
if [[ -n "$FEATURES" ]]; then | |
FORMATTED_CHANGELOG+="\n Features:\n$FEATURES" | |
fi | |
if [[ -n "$BUGFIXES" ]]; then | |
FORMATTED_CHANGELOG+="\n Bugfixes:\n$BUGFIXES" | |
fi | |
if [[ -n "$CHANGES" ]]; then | |
FORMATTED_CHANGELOG+="\n Changes:\n$CHANGES" | |
fi | |
if [[ -n "$OPTIMIZATIONS" ]]; then | |
FORMATTED_CHANGELOG+="\n Optimizations:\n$OPTIMIZATIONS" | |
fi | |
if [[ -n "$INFO" ]]; then | |
FORMATTED_CHANGELOG+="\n Info:\n$INFO" | |
fi | |
echo "formatted_changelog<<EOF" >> $GITHUB_OUTPUT | |
echo "$FORMATTED_CHANGELOG" >> $GITHUB_OUTPUT | |
echo "EOF" >> $GITHUB_OUTPUT | |
- name: Update info.json | |
run: | | |
jq ".version = \"$NEXT_VERSION\"" info.json > info.json.tmp && mv info.json.tmp info.json | |
- name: Commit changes | |
run: | | |
git config --global user.name 'GitHub Actions Bot' | |
git config --global user.email 'actions@github.com' | |
git add info.json changelog.txt | |
git commit -m "Release v$NEXT_VERSION" | |
git push | |
- name: Package mod | |
run: | | |
MOD_NAME=$(jq -r .name info.json) | |
MOD_VERSION=$(jq -r .version info.json) | |
zip -r "$MOD_NAME-$MOD_VERSION.zip" . -x "*.git*" -x "*.github*" | |
echo "MOD_FILE=$MOD_NAME-$MOD_VERSION.zip" >> $GITHUB_ENV | |
- name: Create GitHub Release | |
id: create_release | |
uses: actions/create-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: v${{ env.NEXT_VERSION }} | |
release_name: v${{ env.NEXT_VERSION }} | |
body: ${{ steps.generate_changelog.outputs.formatted_changelog }} | |
draft: ${{ github.ref != 'refs/heads/master' }} | |
prerelease: false | |
- name: Upload Release Asset | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ${{ env.MOD_FILE }} | |
asset_name: ${{ env.MOD_FILE }} | |
asset_content_type: application/zip |