name: Build & Release on: pull_request: branches: - release/wf types: - closed jobs: build-release: if: ${{ github.event.pull_request.merged == true }} runs-on: windows-latest env: PROJECT_NAME: SpineViewer steps: - name: Checkout code uses: actions/checkout@v3 - name: Setup .NET SDK uses: actions/setup-dotnet@v3 with: dotnet-version: '8.0.x' - name: Extract version from csproj id: extract_version run: | # 从 csproj 读取 x.y.z VERSION_NUM=$(grep -oP '(?<=)[^<]+' "${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}.csproj") # 带上 v 前缀 VERSION_TAG="v${VERSION_NUM}" echo "VERSION_NUM=${VERSION_NUM}" >> $GITHUB_OUTPUT echo "VERSION_TAG=${VERSION_TAG}" >> $GITHUB_OUTPUT - name: Export VERSION env (with v prefix) run: echo "VERSION=${{ steps.extract_version.outputs.VERSION_TAG }}" >> $GITHUB_ENV - name: Tag merge commit run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git tag -a "${VERSION}" -m "Release ${VERSION}" git push origin "${VERSION}" - name: Publish FrameworkDependent version run: | dotnet publish ${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}.csproj -c Release -r win-x64 --sc false -o publish/${{ env.PROJECT_NAME }}-${{ env.VERSION }} - name: Publish SelfContained version run: | dotnet publish ${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}.csproj -c Release -r win-x64 --sc true -o publish/${{ env.PROJECT_NAME }}-${{ env.VERSION }}-SelfContained - name: Create release directory run: mkdir release - name: Compress FrameworkDependent version shell: pwsh run: | Compress-Archive -Path "publish/${env:PROJECT_NAME}-${env:VERSION}" -DestinationPath "release/${env:PROJECT_NAME}-${env:VERSION}.zip" -Force - name: Compress SelfContained version shell: pwsh run: | Compress-Archive -Path "publish/${env:PROJECT_NAME}-${env:VERSION}-SelfContained" -DestinationPath "release/${env:PROJECT_NAME}-${env:VERSION}-SelfContained.zip" -Force - name: Create GitHub Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ env.VERSION }} release_name: Release ${{ env.VERSION }} draft: false prerelease: false - name: Upload FrameworkDependent zip uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: release/${{ env.PROJECT_NAME }}-${{ env.VERSION }}.zip asset_name: ${{ env.PROJECT_NAME }}-${{ env.VERSION }}.zip asset_content_type: application/zip - name: Upload SelfContained zip uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: release/${{ env.PROJECT_NAME }}-${{ env.VERSION }}-SelfContained.zip asset_name: ${{ env.PROJECT_NAME }}-${{ env.VERSION }}-SelfContained.zip asset_content_type: application/zip