Skip to content

Refactor folder retrieval logic to improve clarity and maintainabilit… #20

Refactor folder retrieval logic to improve clarity and maintainabilit…

Refactor folder retrieval logic to improve clarity and maintainabilit… #20

Workflow file for this run

name: ci
on:
push:
branches: [main]
paths:
- 'src/**'
workflow_dispatch:
jobs:
generate-version:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- name: Get last merged PR labels
id: prlabels
run: |
PR=$(gh pr list --state merged --base main --limit 1 --json number --jq '.[0].number')
LABELS=$(gh pr view $PR --json labels --jq '[.labels[].name]')
echo "PR_NUMBER=$PR" >> $GITHUB_ENV
echo "LABELS=$LABELS" >> $GITHUB_ENV
# Fail if both preview and release are set
if [[ "$LABELS" == *"preview"* && "$LABELS" == *"release"* ]]; then
echo "❌ Both 'preview' and 'release' labels present. Only one allowed."
exit 1
fi
# Fail if neither preview nor release is set
if [[ "$LABELS" != *"preview"* && "$LABELS" != *"release"* && "$LABELS" != *"norelease"* ]]; then
echo "❌ PR must have 'preview', 'release' or 'norelease' label."
exit 1
fi
# Set PRERELEASE
if [[ "$LABELS" == *"preview"* ]]; then
echo "PRERELEASE=true" >> $GITHUB_ENV
else
echo "PRERELEASE=false" >> $GITHUB_ENV
fi
# Set bump type
if [[ "$LABELS" == *"Semver-Major"* ]]; then
echo "BUMP=major" >> $GITHUB_ENV
elif [[ "$LABELS" == *"Semver-Minor"* ]]; then
echo "BUMP=minor" >> $GITHUB_ENV
else
echo "BUMP=patch" >> $GITHUB_ENV
fi
# Set NORELEASE as output of this step
echo "NORELEASE=${{ env.NORELEASE }}" >> $GITHUB_ENV
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: GitHub Tag Bump
id: tag_bump
uses: anothrNick/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
INITIAL_VERSION: 1.0.0
DEFAULT_BUMP: ${{ env.BUMP }}
PRERELEASE: ${{ env.PRERELEASE }}
PRERELEASE_SUFFIX: 'preview'
outputs:
new_version: ${{ steps.tag_bump.outputs.new_tag }}
norelease: ${{ steps.tag_bump.outputs.norelease }}
publish-types:
if: needs.generate-version.outputs.norelease != 'true'
uses: ./.github/workflows/reusable-publish.yml
with:
project_path: src/Blake.Types/Blake.Types.csproj
version: ${{ needs.generate-version.outputs.new_version }}
secrets: inherit
needs: generate-version
publish-markdownparser:
if: needs.generate-version.outputs.norelease != 'true'
uses: ./.github/workflows/reusable-publish.yml
with:
project_path: src/Blake.MarkdownParser/Blake.MarkdownParser.csproj
version: ${{ needs.generate-version.outputs.new_version }}
wait_for_package_id: Blake.Types
wait_for_package_version: ${{ needs.generate-version.outputs.new_version }}
secrets: inherit
needs: [publish-types, generate-version]
publish-buildtools:
if: needs.generate-version.outputs.norelease != 'true'
uses: ./.github/workflows/reusable-publish.yml
with:
project_path: src/Blake.BuildTools/Blake.BuildTools.csproj
version: ${{ needs.generate-version.outputs.new_version }}
wait_for_package_id: Blake.MarkdownParser
wait_for_package_version: ${{ needs.generate-version.outputs.new_version }}
secrets: inherit
needs: [publish-markdownparser, generate-version]
publish-cli:
if: needs.generate-version.outputs.norelease != 'true'
uses: ./.github/workflows/reusable-publish.yml
with:
project_path: src/Blake.CLI/Blake.CLI.csproj
version: ${{ needs.generate-version.outputs.new_version }}
wait_for_package_id: Blake.BuildTools
wait_for_package_version: ${{ needs.generate-version.outputs.new_version }}
secrets: inherit
needs: [publish-buildtools, generate-version]