Skip to content

ci: update github action #17

ci: update github action

ci: update github action #17

Workflow file for this run

name: Publish-Nuget
on:
push:
tags:
- 'v*' # Matches tag names like v1.0.0 for releases
branches:
- "main"
- "ci/nuget-package"
paths-ignore:
- "tests/**"
env:
GHC_SOURCE: ${{ vars.GHC_SOURCE }}
# FEED_SOURCE: https://api.nuget.org/v3/index.json
# FEED_API_KEY: ${{ secrets.FEED_API_KEY }}
GHC_API_KEY: ${{ secrets.GHC_TOKEN }}
NuGetDirectory: nuget
AIAssistBuildOutput: src/AIAssist/bin/Release/net8.0/
DownloadOutput: download
jobs:
build-tree-sitter:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ ubuntu-latest, windows-latest ]
steps:
- uses: actions/checkout@v4
with:
submodules: true
# https://github.com/dotnet/Nerdbank.GitVersioning/blob/main/doc/cloudbuild.md#github-actions
fetch-depth: 0 # doing deep clone and avoid shallow clone so nbgv can do its work.
- name: Set up GCC (Linux only)
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y gcc
- name: Set up GCC (Windows only)
if: runner.os == 'Windows'
uses: msys2/setup-msys2@v2
with:
msystem: MINGW64
install: gcc
- name: Build Tree-Sitter binaries on ${{ matrix.os }}
run: |
if [[ "$(uname)" == "Linux" ]]; then
chmod +x ./scripts/ci_install_tree_sitter.sh
fi
./scripts/ci_install_tree_sitter.sh
shell: bash
- name: Upload all Linux binaries
if: matrix.os == 'ubuntu-latest'
uses: actions/upload-artifact@v4
with:
retention-days: 7
name: tree-sitter-ubuntu-binaries
path: |
tree-sitter/bins/*.so
tree-sitter/grammars/bins/*.so
- name: Upload all Windows binaries
if: matrix.os == 'windows-latest'
uses: actions/upload-artifact@v4
with:
name: tree-sitter-windows-binaries
retention-days: 7
path: |
tree-sitter/bins/*.dll
tree-sitter/grammars/bins/*.dll
create-nuget:
runs-on: ubuntu-latest
needs: [ build-tree-sitter ]
steps:
- uses: actions/checkout@v4
with:
# https://github.com/dotnet/Nerdbank.GitVersioning/blob/main/doc/cloudbuild.md#github-actions
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: "8.0.x"
- name: Cache NuGet Packages
uses: actions/cache@v4
with:
key: ai-assist-nuget
path: ~/.nuget/packages
- name: Download Linux binaries
uses: actions/download-artifact@v4
with:
name: tree-sitter-ubuntu-binaries
path: ${{ env.DownloadOutput }}
- name: Download Windows binaries
uses: actions/download-artifact@v4
with:
name: tree-sitter-windows-binaries
path: ${{ env.DownloadOutput }}
- name: Flatten downloaded binaries
run: |
mv ${{ env.DownloadOutput }}/bins/* ${{ env.AIAssistBuildOutput }}/
mv ${{ env.DownloadOutput }}/grammars/bins/* ${{ env.AIAssistBuildOutput }}/
rm -rf ${{ env.DownloadOutput }}
- name: List files
run: |
echo "Listing files in DownloadOutput:"
ls -R ${{ env.DownloadOutput }}
echo "Listing files in AIAssistBuildOutput:"
ls -R ${{ env.AIAssistBuildOutput }}
# https://github.com/dotnet/Nerdbank.GitVersioning/blob/main/doc/nbgv-cli.md
- name: Install Nerdbank.GitVersioning
run: dotnet tool install -g nbgv
- name: Get NuGetPackageVersion
id: get_version
run: |
nugetVersion=$(nbgv get-version | grep "NuGetPackageVersion" | awk -F': ' '{print $2}' | xargs)
echo "NuGetPackageVersion: $nugetVersion"
echo "::set-output name=nuget_version::$nugetVersion"
- name: Restore dependencies
run: dotnet restore AIAssistant.sln
- name: Build Version ${{ steps.get_version.outputs.nuget_version }}
run: dotnet build AIAssistant.sln -c Release --no-restore
- name: List files in AIAssistBuildOutput
run: |
echo "Listing files in ${{ env.AIAssistBuildOutput }}:"
ls -R ${{ env.AIAssistBuildOutput }}
# https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-pack
- name: Pack NuGet Package Version ${{ steps.get_version.outputs.nuget_version }}
run: dotnet pack src/AIAssist/AIAssist.csproj -o ${{ env.NuGetDirectory }} -c Release --no-restore --no-build
# Publish the NuGet package as an artifact, so they can be used in the following jobs
- uses: actions/upload-artifact@v4
with:
name: nuget
if-no-files-found: error
retention-days: 7
path: ${{ env.NuGetDirectory }}/*.nupkg
deploy-nuget:
runs-on: ubuntu-latest
# https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository
needs: [ create-nuget ]
steps:
- uses: actions/checkout@v4
with:
# https://github.com/dotnet/Nerdbank.GitVersioning/blob/main/doc/cloudbuild.md#github-actions
fetch-depth: 0 # doing deep clone and avoid shallow clone so nbgv can do its work.
# Download the NuGet package created in the previous job and copy in the root
- uses: actions/download-artifact@v4
with:
name: nuget
## Optional. Default is $GITHUB_WORKSPACE
path: ${{ github.workspace}}
# Install the .NET SDK indicated in the global.json file
- name: Setup .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: "8.0.x"
# https://github.com/dotnet/Nerdbank.GitVersioning/blob/main/doc/nbgv-cli.md
- name: Install Nerdbank.GitVersioning
run: dotnet tool install -g nbgv
- name: Get NuGetPackageVersion
id: get_version
run: |
nugetVersion=$(nbgv get-version | grep "NuGetPackageVersion" | awk -F': ' '{print $2}' | xargs)
echo "NuGetPackageVersion: $nugetVersion"
echo "::set-output name=nuget_version::$nugetVersion"
# for publish package to github for each commit
- name: Publish NuGet Package Version ${{ steps.get_version.outputs.nuget_version }} to GitHub
run: dotnet nuget push *.nupkg --skip-duplicate --api-key ${{ env.GHC_API_KEY }} --source ${{ env.GHC_SOURCE }}
if: github.event_name == 'push' && (startswith(github.ref, 'refs/heads') || startswith(github.ref, 'refs/tags'))
# # Publish all NuGet packages to NuGet.org
# # Use --skip-duplicate to prevent errors if a package with the same version already exists.
# # If you retry a failed workflow, already published packages will be skipped without error.
# # https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-nuget-push
# - name: Publish NuGet Package Version ${{ steps.get_version.outputs.nuget_version }} to Nuget
# run: dotnet nuget push *.nupkg --skip-duplicate --source ${{ env.FEED_SOURCE }} --api-key ${{ env.FEED_API_KEY }}
# if: github.event_name == 'push' && startswith(github.ref, 'refs/tags')