name: Build And Publish AIFotoONLUS.Core on: push: branches: - master - develop tags: - '*' workflow_dispatch: env: DOTNET_VERSION: 10.0.x PROJECT_PATH: src/AIFotoONLUS.Core/AIFotoONLUS.Core.csproj PACKAGE_OUTPUT_DIR: artifacts/nuget PACKAGE_ARTIFACT_NAME: aifotoonlus-core-nuget NUGET_SOURCE_NAME: forgejo-aifotoonlus NUGET_SOURCE_URL: ${{ vars.AIFOTOONLUS_NUGET_SOURCE_URL || format('{0}/api/packages/{1}/nuget/index.json', github.server_url, vars.AIFOTOONLUS_PACKAGE_OWNER || github.repository_owner) }} jobs: build: runs-on: docker steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ env.DOTNET_VERSION }} - name: Restore run: dotnet restore "${{ env.PROJECT_PATH }}" - name: Build run: dotnet build "${{ env.PROJECT_PATH }}" --configuration Release --no-restore /p:GeneratePackageOnBuild=false - name: Pack shell: bash run: | set -eu mkdir -p "${{ env.PACKAGE_OUTPUT_DIR }}" if [[ "${GITHUB_REF}" == refs/tags/* ]]; then package_version="${GITHUB_REF_NAME#v}" echo "Packing tag version ${package_version}" dotnet pack "${{ env.PROJECT_PATH }}" \ --configuration Release \ --output "${{ env.PACKAGE_OUTPUT_DIR }}" \ --no-build \ /p:PackageVersion="${package_version}" else echo "Packing with project version or MinVer-derived version" dotnet pack "${{ env.PROJECT_PATH }}" \ --configuration Release \ --output "${{ env.PACKAGE_OUTPUT_DIR }}" \ --no-build fi - name: Upload package artifact uses: actions/upload-artifact@v3 with: name: ${{ env.PACKAGE_ARTIFACT_NAME }} path: ${{ env.PACKAGE_OUTPUT_DIR }}/*.nupkg if-no-files-found: error publish: if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' needs: build runs-on: docker env: FORGEJO_PACKAGE_USERNAME: ${{ secrets.FORGEJO_PACKAGE_USERNAME }} FORGEJO_PACKAGE_TOKEN: ${{ secrets.FORGEJO_PACKAGE_TOKEN }} steps: - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ env.DOTNET_VERSION }} - name: Download package artifact uses: actions/download-artifact@v3 with: name: ${{ env.PACKAGE_ARTIFACT_NAME }} path: ${{ env.PACKAGE_OUTPUT_DIR }} - name: Validate publish secrets shell: bash run: | set -eu if [ -z "${FORGEJO_PACKAGE_USERNAME}" ]; then echo "secrets.FORGEJO_PACKAGE_USERNAME is required" exit 1 fi if [ -z "${FORGEJO_PACKAGE_TOKEN}" ]; then echo "secrets.FORGEJO_PACKAGE_TOKEN is required" exit 1 fi - name: Configure Forgejo NuGet source run: | dotnet nuget add source "${{ env.NUGET_SOURCE_URL }}" \ --name "${{ env.NUGET_SOURCE_NAME }}" \ --username "${FORGEJO_PACKAGE_USERNAME}" \ --password "${FORGEJO_PACKAGE_TOKEN}" \ --store-password-in-clear-text - name: Publish package to Forgejo NuGet shell: bash run: | set -eu shopt -s nullglob packages=("${{ env.PACKAGE_OUTPUT_DIR }}"/*.nupkg) if [ "${#packages[@]}" -eq 0 ]; then echo "No NuGet packages found in ${{ env.PACKAGE_OUTPUT_DIR }}" exit 1 fi dotnet nuget push "${{ env.PACKAGE_OUTPUT_DIR }}"/*.nupkg \ --source "${{ env.NUGET_SOURCE_NAME }}" \ --skip-duplicate