Skip to content

📦 Release

📦 Release #6

Workflow file for this run

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
run: |
echo "tag=$(git tag --sort=v:refname | grep -E '^[^v]' | tail -1)" >> "$GITHUB_OUTPUT"
- 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