-
Notifications
You must be signed in to change notification settings - Fork 6
139 lines (125 loc) · 4.74 KB
/
Copy pathcore-release.yml
File metadata and controls
139 lines (125 loc) · 4.74 KB
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
135
136
137
138
139
name: Codout.Framework Core Release
# Release per-package dos pacotes CORE do Framework (Data/Domain/EF e afins),
# desacoplado do release da tool MCP. Resolve a divida "publish manual + versao
# unica global": dispara por tag `core-v<versao>` (ou workflow_dispatch para
# dry-run), valida restore/build/test, empacota SOMENTE os projetos informados
# com a versao da tag (-p:Version, sem tocar o Directory.Build.props global) e
# publica no NuGet.org de forma idempotente (--skip-duplicate). O secret
# NUGET_API_KEY ja existe no repo (usado pelo mcp-release.yml).
#
# Default packs o conjunto-kernel { Data, Domain, EF } — fechado por
# ProjectReference (Domain->Data, EF->Data; Data folha). Para publicar outro
# subconjunto, usar workflow_dispatch com o input `projects`.
#
# DRY-RUN: `workflow_dispatch` (ou push em qualquer ref que nao seja tag core-v*)
# roda build-test-pack SEM publicar (o job publish so roda em refs/tags/core-v*).
#
# Exemplo: criar a tag `core-v6.4.0` publica Data/Domain/EF 6.4.0; Common/Storage
# permanecem na versao anterior (sao folhas, sem conflito de dependencia).
on:
push:
tags:
- 'core-v*'
workflow_dispatch:
inputs:
version:
description: 'Versao dos pacotes (ex: 6.4.0)'
required: true
projects:
description: 'Projetos a empacotar (separados por espaco). Vazio = kernel Data+Domain+EF.'
required: false
default: ''
env:
DOTNET_NOLOGO: true
DOTNET_CLI_TELEMETRY_OPTOUT: true
CONFIGURATION: Release
TEST_PROJECT: tests/Codout.Framework.EF.Tests/Codout.Framework.EF.Tests.csproj
DEFAULT_PROJECTS: >-
Codout.Framework.Data/Codout.Framework.Data.csproj
Codout.Framework.Domain/Codout.Framework.Domain.csproj
Codout.Framework.EF/Codout.Framework.EF.csproj
jobs:
build-test-pack:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: 10.0.x
- name: Resolve version
id: version
run: |
if [ -n "${{ github.event.inputs.version }}" ]; then
VERSION="${{ github.event.inputs.version }}"
elif [[ "${GITHUB_REF}" == refs/tags/core-v* ]]; then
VERSION="${GITHUB_REF#refs/tags/core-v}"
else
echo "Sem fonte de versao (nem input nem tag core-v*)." >&2
exit 1
fi
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
echo "Resolved version: ${VERSION}"
- name: Resolve projects
id: projects
run: |
PROJECTS="${{ github.event.inputs.projects }}"
if [ -z "$PROJECTS" ]; then
PROJECTS="${DEFAULT_PROJECTS}"
fi
echo "projects=$(echo $PROJECTS | xargs)" >> "$GITHUB_OUTPUT"
echo "Projects: $(echo $PROJECTS | xargs)"
- name: Test (gate da convencao)
# Restaura+builda+roda os testes comportamentais da ClientGeneratedIdConvention
# (prova A/B do fix). Falha aqui = aborta o release antes de empacotar.
run: dotnet test "$TEST_PROJECT" --configuration "$CONFIGURATION"
- name: Pack
run: |
for proj in ${{ steps.projects.outputs.projects }}; do
dotnet pack "$proj" --configuration "$CONFIGURATION" \
-p:Version=${{ steps.version.outputs.version }} \
-p:PackageVersion=${{ steps.version.outputs.version }} \
--output ./artifacts
done
- name: List artifacts (dry-run visibility)
run: ls -la ./artifacts
- name: Upload artifacts
uses: actions/upload-artifact@v7
with:
name: codout-framework-core-nupkg
path: |
./artifacts/*.nupkg
./artifacts/*.snupkg
if-no-files-found: error
publish:
needs: build-test-pack
runs-on: ubuntu-latest
# So publica em tag core-v* (workflow_dispatch = dry-run, NAO publica).
if: startsWith(github.ref, 'refs/tags/core-v')
permissions:
contents: read
steps:
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: 10.0.x
- name: Download artifacts
uses: actions/download-artifact@v8
with:
name: codout-framework-core-nupkg
path: ./artifacts
- name: Push to NuGet.org
env:
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
run: |
if [ -z "$NUGET_API_KEY" ]; then
echo "NUGET_API_KEY secret nao configurado; abortando." >&2
exit 1
fi
dotnet nuget push "./artifacts/*.nupkg" \
--api-key "$NUGET_API_KEY" \
--source https://api.nuget.org/v3/index.json \
--skip-duplicate