-
Notifications
You must be signed in to change notification settings - Fork 2
134 lines (118 loc) · 4.46 KB
/
release.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
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