📦 Release #4
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" | |
on: | |
# Make a release whenever the developer wants. | |
workflow_dispatch: | |
inputs: | |
bump: | |
type: string | |
description: "major, minor, or patch" | |
required: true | |
default: "patch" | |
# Make a release whenever we're told to by another workflow. | |
workflow_call: | |
secrets: | |
NUGET_API_KEY: | |
description: "API key for Nuget" | |
required: true | |
GH_BASIC: | |
description: "Personal access token (PAT) for GitHub" | |
required: true | |
# Input unifies with the workflow dispatch since it's identical. | |
inputs: | |
bump: | |
type: string | |
description: "major, minor, or patch" | |
required: true | |
default: "patch" | |
jobs: | |
release: | |
name: "📦 Release" | |
runs-on: ubuntu-latest | |
env: | |
DOTNET_CLI_TELEMETRY_OPTOUT: true | |
DOTNET_NOLOGO: true | |
steps: | |
- name: 🧾 Checkout | |
uses: actions/checkout@v4 | |
with: | |
lfs: true | |
submodules: "recursive" | |
fetch-depth: 0 # So we can get all tags. | |
- name: 🔎 Read Current Project Version | |
id: current-version | |
uses: WyriHaximus/github-action-get-previous-tag@v1 | |
with: | |
fallback: "0.0.0-devbuild" | |
- name: 🖨 Print Current Version | |
run: | | |
echo "Current Version: ${{ steps.current-version.outputs.tag }}" | |
- name: 🧮 Compute Next Version | |
uses: chickensoft-games/next-godot-csproj-version@v1 | |
id: next-version | |
with: | |
project-version: ${{ steps.current-version.outputs.tag }} | |
godot-version: global.json | |
bump: ${{ inputs.bump }} | |
- uses: actions/setup-dotnet@v4 | |
name: 💽 Setup .NET SDK | |
with: | |
# Use the .NET SDK from global.json in the root of the repository. | |
global-json-file: global.json | |
# Write version to file so .NET will build correct version. | |
- name: 📝 Write Version to File | |
uses: jacobtomlinson/gha-find-replace@v3 | |
with: | |
find: "0.0.0-devbuild" | |
replace: ${{ steps.next-version.outputs.version }} | |
regex: false | |
include: Chickensoft.GodotNodeInterfaces/Chickensoft.GodotNodeInterfaces.csproj | |
- name: 📦 Restore All Packages | |
run: | | |
dotnet restore | |
- name: 🛠 Build Generator | |
working-directory: Chickensoft.GodotNodeInterfacesGenerator | |
run: | | |
dotnet build --no-restore | |
- name: 🧬 Run Generator | |
working-directory: Chickensoft.GodotNodeInterfacesGenerator | |
run: | | |
dotnet run | |
- name: 🧪 Verify Generated Files Exist | |
run: | | |
# We want to verify that at least 200 files exist in Chickensoft.GodotNodeInterfaces/src/adapters | |
# and in Chickensoft.GodotNodeInterfaces/src/interfaces | |
# count the number of files in the adapters directory | |
adapter_count=$(find Chickensoft.GodotNodeInterfaces/src/adapters -type f | wc -l) | |
# count the number of files in the interfaces directory | |
interface_count=$(find Chickensoft.GodotNodeInterfaces/src/interfaces -type f | wc -l) | |
if [ "$adapter_count" -lt 200 ]; then | |
echo "❌ Adapter count is less than 200" | |
exit 1 | |
elif [ "$interface_count" -lt 200 ]; then | |
echo "❌ Interface count is less than 200" | |
exit 1 | |
else | |
echo "✅ Generated $adapter_count adapters and $interface_count" interfaces! | |
fi | |
- name: 👩🔬 Verify Generated Types Build | |
working-directory: Chickensoft.GodotNodeInterfaces | |
run: | | |
dotnet build --configuration Release --property WarningLevel=0 | |
- name: 🔎 Get Package Path | |
id: package-path | |
run: | | |
package=$(find ./Chickensoft.GodotNodeInterfaces/nupkg -name "*.nupkg") | |
echo "package=$package" >> "$GITHUB_OUTPUT" | |
echo "📦 Found package: $package" | |
- name: ✨ Create Release | |
env: | |
GITHUB_TOKEN: ${{ secrets.GH_BASIC }} | |
run: | | |
version="${{ steps.next-version.outputs.version }}" | |
gh release create --title "v$version" --generate-notes "$version" \ | |
"${{ steps.package-path.outputs.package }}" | |
- name: 🛜 Publish to Nuget | |
run: | | |
dotnet nuget push "${{ steps.package-path.outputs.package }}" \ | |
--api-key "${{ secrets.NUGET_API_KEY }}" \ | |
--source "https://api.nuget.org/v3/index.json" --skip-duplicate |