Tengo una solución de C# que contiene un solo proyecto y varias bibliotecas usando .Net 6. Estoy usando confirmaciones convencionales (commitlint con husky) y quiero usar la liberación semántica para implementar la última compilación como un archivo ZIP en Github según la confirmación. mensajes
La configuración que probé para los proyectos de C#:
.
npm install semantic-release -D npm install @semantic-release/changelog -D npm install @semantic-release/npm -D npm install @semantic-release/github -D npm install @semantic-release/git -D.
{ "plugins": [ "@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", "@semantic-release/changelog", "@semantic-release/npm", [ "@semantic-release/github", { "assets": [ { "path": "my-project.zip", "label": "my-project-${nextRelease.gitTag}.zip", "name": "my-project-${nextRelease.gitTag}.zip" } ] } ], "@semantic-release/git" ] }version de la clave en 0.0.0-development , establezca la clave private en true y agregue una URL de repositorio.
name: Release on push on main branch on: push: branches: - main jobs: release-on-push-on-main-branch: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 with: fetch-depth: 0 - name: Setup Node uses: actions/setup-node@v2 with: node-version: 16.x - name: Install Node dependencies run: npm install - name: Setup .Net uses: actions/setup-dotnet@v1 with: dotnet-version: '6.0.x' - name: Install .Net dependencies run: dotnet restore ./SolutionDir - name: Run build run: dotnet build ./SolutionDir - name: Run publish run: dotnet publish ./SolutionDir - name: Rename publish directory of MyProject to my-project and move it to root run: mv ./SolutionDir/MyProject/bin/Debug/net6.0 ./my-project - name: ZIP my-project directory run: zip -r my-project.zip my-project - name: Release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: npx semantic-release --branches mainParece funcionar, cada vez que presiono a la rama principal, implementará la distribución (que contiene la DLL) con la última versión de las versiones de Github.
Pero como sabe, semantic-release no publica la versión correcta del paquete porque aún no conoce la versión de ensamblaje. Toma la versión del archivo package.json .
Lo que quiero lograr:
"name": "my-project-${assembly-version}.zip"¿Hay algo que pueda usar?
Puede realizar una ejecución en seco de semantic-release antes de la publicación de dotnet publish para obtener el número de versión del lanzamiento (usando el complemento @semantic-release/exec ). Luego, pase este número de versión obtenido a dotnet publish :
Agregue el complemento @semantic-release/exec a sus comandos npm install y ajuste su archivo .releaserc.json para almacenar la próxima versión de lanzamiento (por ejemplo, en una variable de entorno):
{ "plugins": [ ..., [ '@semantic-release/exec', { verifyReleaseCmd: 'echo RELEASE_VERSION=\${nextRelease.version} >> $GITHUB_ENV' } ] ] } Inserte la ejecución de prueba antes de la publicación de dotnet publish y ajuste el paso de dotnet publish :
... - name: Fetch release version env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: npx semantic-release --branches main --dry-run - name: Run publish run: dotnet publish ./SolutionDir -p:Version=${{ env.RELEASE_VERSION }} ... Nota: en lugar de cambiar el Rename publish directory of MyProject to my-project and move it to root , simplemente puede usar el parámetro -o del comando de dotnet publish .