Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions .github/workflows/nuget-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: Publish NuGet

# Empacota e publica os 6 projetos NFe/DFe netstandard como pacotes NuGet
# em GitHub Packages (feed da org nfe).
#
# Triggers:
# - push de tag v* → release versionada (pega a versão da tag)
# - workflow_dispatch → execução manual para testes (versão informada
# como input ou fallback 0.0.0-manual.{run_number})
#
# Pré-requisitos no consumidor:
# 1. nuget.config com source apontando para https://nuget.pkg.github.com/nfe/index.json
# 2. PAT com escopo read:packages adicionado como secret/login NuGet
#
# Pacotes publicados: NFEio.DFe.Classes, NFEio.DFe.Utils, NFEio.NFe.Classes,
# NFEio.NFe.Servicos, NFEio.NFe.Utils, NFEio.NFe.Wsdl.

on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
version:
description: 'Versão a publicar (ex: 1.0.0-rc.1). Vazio = 0.0.0-manual.{run_number}'
required: false
type: string

permissions:
contents: read
packages: write

jobs:
pack-and-publish:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'

- name: Resolve version
id: version
run: |
if [[ "${{ github.event_name }}" == "push" ]]; then
# tag refs/tags/vX.Y.Z → X.Y.Z
VERSION="${GITHUB_REF_NAME#v}"
elif [[ -n "${{ inputs.version }}" ]]; then
VERSION="${{ inputs.version }}"
else
VERSION="0.0.0-manual.${{ github.run_number }}"
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "Resolved version: $VERSION"

- name: Pack projects
run: |
for proj in DFe.Classes DFe.Utils NFe.Classes NFe.Servicos NFe.Utils NFe.Wsdl; do
echo "::group::Pack $proj"
dotnet pack "$proj/$proj.csproj" \
--configuration Release \
--output ./artifacts \
-p:Version=${{ steps.version.outputs.version }}
echo "::endgroup::"
done

- name: List artifacts
run: ls -la ./artifacts

- name: Push packages (.nupkg) to GitHub Packages
run: |
dotnet nuget push './artifacts/*.nupkg' \
--source https://nuget.pkg.github.com/nfe/index.json \
--api-key ${{ secrets.GITHUB_TOKEN }} \
--skip-duplicate
Comment thread
rhfranzoni marked this conversation as resolved.

# Symbol packages (.snupkg) precisam de push separado — o glob *.nupkg
# acima não os captura, e o Directory.Build.props declara IncludeSymbols
# com SymbolPackageFormat=snupkg. Sem este passo os consumidores não
# conseguem PDBs nem SourceLink (debugging quebrado). GitHub Packages
# suporta .snupkg desde 2020.
- name: Push symbol packages (.snupkg) to GitHub Packages
run: |
dotnet nuget push './artifacts/*.snupkg' \
--source https://nuget.pkg.github.com/nfe/index.json \
--api-key ${{ secrets.GITHUB_TOKEN }} \
--skip-duplicate

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: nuget-packages-${{ steps.version.outputs.version }}
path: ./artifacts/*.*nupkg
retention-days: 30
2 changes: 2 additions & 0 deletions DFe.Classes/DFe.Classes.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
<RootNamespace>DFe.Classes</RootNamespace>
<AssemblyName>DFe.Classes</AssemblyName>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<PackageId>NFEio.DFe.Classes</PackageId>
<Description>Classes compartilhadas entre os projetos DFe (NFe, NFCe, CTe, MDFe) do fork NFE.io de Zeus.Net.NFe.NFCe. Inclui tipos básicos, entidades de domínio e flags.</Description>
</PropertyGroup>

<ItemGroup>
Expand Down
2 changes: 2 additions & 0 deletions DFe.Utils/DFe.Utils.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
<RootNamespace>DFe.Utils</RootNamespace>
<AssemblyName>DFe.Utils</AssemblyName>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<PackageId>NFEio.DFe.Utils</PackageId>
<Description>Utilitários compartilhados entre os projetos DFe (NFe, NFCe, CTe, MDFe) do fork NFE.io de Zeus.Net.NFe.NFCe. Inclui assinatura digital, extensões de tipos e helpers de serialização XML.</Description>
</PropertyGroup>

<ItemGroup>
Expand Down
41 changes: 41 additions & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<Project>

<!--
Propriedades comuns dos pacotes NuGet publicados pelo fork nfe/DFe.NET.

Cada projeto packável (DFe.Classes, DFe.Utils, NFe.Classes, NFe.Servicos,
NFe.Utils, NFe.Wsdl) sobrescreve <PackageId> e <Description>. Os demais
metadados (autoria, licença, URLs, símbolos) vivem aqui para evitar
drift entre os 6 csproj.

Versionamento: <Version> é injetada pela pipeline CI (.github/workflows/
nuget-publish.yml) extraindo de tags `v*`. Fallback `1.0.0-local` permite
`dotnet pack` rodar localmente para testes sem CI.
-->
<PropertyGroup>
<Version Condition="'$(Version)' == ''">1.0.0-local</Version>
<Authors>NFE.io</Authors>
<Company>NFE.io</Company>
<Copyright>Copyright (c) NFE.io e contribuidores Zeus (Zeusdev Tecnologia LTDA)</Copyright>
<PackageLicenseExpression>LGPL-2.1-or-later</PackageLicenseExpression>
<PackageProjectUrl>https://github.com/nfe/DFe.NET</PackageProjectUrl>
<RepositoryUrl>https://github.com/nfe/DFe.NET</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageTags>nfe;nfce;sefaz;dfe;rtc;reforma-tributaria;nfeio</PackageTags>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>

<!--
README.md da raiz do repo incluído em todos os pacotes (mesma fonte).
Necessário porque o NuGet 5.10+ exige PackageReadmeFile referenciando
arquivo do próprio diretório do projeto OU explicitamente Pack=true.
-->
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)README.md" Pack="true" PackagePath="\" Visible="false" />
</ItemGroup>

</Project>
2 changes: 2 additions & 0 deletions NFe.Classes/NFe.Classes.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
<RootNamespace>NFe.Classes</RootNamespace>
<AssemblyName>NFe.Classes</AssemblyName>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<PackageId>NFEio.NFe.Classes</PackageId>
<Description>Classes de domínio para Nota Fiscal Eletrônica (NFe) e Nota Fiscal de Consumidor Eletrônica (NFCe) — fork NFE.io de Zeus.Net.NFe.NFCe. Inclui leiaute completo NFe v4.00, eventos da NT 2025.002-RTC (211110-150, 212110-120, 412120-130, 110001), tipos do IBS/CBS/IS, e classes de DistribuicaoDFe.</Description>
</PropertyGroup>
<ItemGroup>
<None Include="NFe.Classes.licenseheader" />
Expand Down
2 changes: 2 additions & 0 deletions NFe.Servicos/NFe.Servicos.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
<RootNamespace>NFe.Servicos</RootNamespace>
<AssemblyName>NFe.Servicos</AssemblyName>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<PackageId>NFEio.NFe.Servicos</PackageId>
<Description>Camada de serviços para invocar webservices SEFAZ da NFe/NFCe — fork NFE.io de Zeus.Net.NFe.NFCe. Expõe ServicosNFe com métodos RecepcaoEvento para os 17 eventos da NT 2025.002-RTC (Crédito Presumido, Imobilização, Consumo Pessoal, Manifestações IBS/CBS de Sucessão, etc.), além dos eventos legacy (Manifestação Destinatário 21020X, Carta de Correção, Cancelamento).</Description>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\DFe.Classes\DFe.Classes.csproj" />
Expand Down
2 changes: 2 additions & 0 deletions NFe.Utils/NFe.Utils.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
<RootNamespace>NFe.Utils</RootNamespace>
<AssemblyName>NFe.Utils</AssemblyName>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<PackageId>NFEio.NFe.Utils</PackageId>
<Description>Utilitários para o leiaute da NFe/NFCe — fork NFE.io de Zeus.Net.NFe.NFCe. Inclui Validador (com mappings XSD da NT 2025.002-RTC), Enderecador (URLs SVRS prod/hom), assinatura digital, conversões de tipos e extensões.</Description>
</PropertyGroup>

<ItemGroup>
Expand Down
2 changes: 2 additions & 0 deletions NFe.Wsdl/NFe.Wsdl.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
<RootNamespace>NFe.Wsdl</RootNamespace>
<AssemblyName>NFe.Wsdl</AssemblyName>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<PackageId>NFEio.NFe.Wsdl</PackageId>
<Description>Contratos WSDL e clientes SOAP para os webservices da NFe/NFCe — fork NFE.io de Zeus.Net.NFe.NFCe. Cobre NfeAutorizacao4, NfeRetAutorizacao4, NfeStatusServico4, NfeConsultaProtocolo4, NfeConsultaCadastro4, NFeRecepcaoEvento4, NFeInutilizacao4, NFeDistribuicaoDFe e variantes estaduais.</Description>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\DFe.Classes\DFe.Classes.csproj" />
Expand Down