Publish Check #241
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Publish Check | |
on: | |
workflow_run: | |
workflows: | |
- Build and Test | |
types: | |
- completed | |
jobs: | |
check_changes: | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
pull-requests: read | |
if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.head_branch == 'main' }} | |
outputs: | |
sdk_node: ${{ steps.filter.outputs.sdk_node }} | |
sdk_dotnet: ${{ steps.filter.outputs.sdk_dotnet }} | |
sdk_go: ${{ steps.filter.outputs.sdk_go }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Filter changed files | |
uses: dorny/paths-filter@v3 | |
id: filter | |
with: | |
filters: | | |
sdk_node: | |
- 'sdk-node/**' | |
sdk_dotnet: | |
- 'sdk-dotnet/**' | |
sdk_go: | |
- 'sdk-go/**' | |
publish-node: | |
needs: check_changes | |
if: ${{ needs.check_changes.outputs.sdk_node == 'true' }} | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
packages: write | |
defaults: | |
run: | |
working-directory: sdk-node | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
cache: "npm" | |
cache-dependency-path: sdk-node/package-lock.json | |
- name: Install dependencies | |
run: npm ci | |
- name: Build package | |
run: npm run build | |
- name: Configure Git User | |
run: | | |
git config --global user.name "Inferable CI" | |
git config --global user.email "[email protected]" | |
- name: Release It | |
run: | | |
npm config set //registry.npmjs.org/:_authToken $NPM_TOKEN | |
version=$(npx release-it --release-version) | |
npx release-it --npm.skipChecks --git.tagName=sdk-node/v${version} --no-github.release --git.commitMessage="Bump sdk-node version to ${version}" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
publish-dotnet: | |
needs: check_changes | |
if: ${{ needs.check_changes.outputs.sdk_dotnet == 'true' }} | |
runs-on: windows-latest | |
permissions: | |
contents: write | |
defaults: | |
run: | |
working-directory: sdk-dotnet | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: "8.0.x" | |
- name: Restore dependencies | |
run: dotnet restore | |
- name: Get and Increment Version | |
id: increment_version | |
shell: pwsh | |
run: | | |
$projectFile = Get-ChildItem -Path ./src -Filter *.csproj | Select-Object -First 1 | |
if (-not $projectFile) { | |
throw "No .csproj file found in current directory" | |
} | |
$xml = [xml](Get-Content $projectFile.FullName) | |
$currentVersion = $xml.Project.PropertyGroup.Version | |
if (-not $currentVersion) { | |
throw "Version element not found in project file" | |
} | |
# Parse version components | |
$major, $minor, $patch = $currentVersion.Split('.') | |
$newPatch = [int]$patch + 1 | |
$newVersion = "$major.$minor.$newPatch" | |
# Update project file | |
$xml.Project.PropertyGroup.Version = $newVersion | |
$xml.Save($projectFile.FullName) | |
# Set output for later steps | |
echo "new_version=$newVersion" >> $env:GITHUB_OUTPUT | |
- name: Build | |
run: dotnet build --configuration Release --no-restore | |
- name: Pack | |
run: dotnet pack --configuration Release --no-restore --output ./output | |
- name: Setup NuGet | |
uses: nuget/setup-nuget@v2 | |
with: | |
nuget-api-key: ${{ secrets.NUGET_API_KEY }} | |
nuget-version: latest | |
- name: Publish | |
run: dotnet nuget push output\*.nupkg -s https://api.nuget.org/v3/index.json | |
- name: Commit and push changes | |
run: | | |
git config --local user.email "github-actions[bot]@users.noreply.github.com" | |
git config --local user.name "github-actions[bot]" | |
git commit -am "Bump sdk-dotnet version to ${{ steps.increment_version.outputs.new_version }}" | |
git push | |
- name: Create Git tag | |
run: | | |
git tag sdk-dotnet/v${{ steps.increment_version.outputs.new_version }} | |
git push origin sdk-dotnet/v${{ steps.increment_version.outputs.new_version }} | |
publish-go: | |
needs: check_changes | |
if: ${{ needs.check_changes.outputs.sdk_go == 'true' }} | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
packages: write | |
defaults: | |
run: | |
working-directory: sdk-go | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set up Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: "1.22" | |
- name: Get current version | |
id: get_version | |
run: | | |
VERSION=$(grep -oP 'const Version = "\K[^"]+' inferable.go) | |
echo "current_version=$VERSION" >> $GITHUB_OUTPUT | |
- name: Increment patch version | |
id: increment_version | |
run: | | |
IFS='.' read -ra VERSION_PARTS <<< "${{ steps.get_version.outputs.current_version }}" | |
MAJOR=${VERSION_PARTS[0]} | |
MINOR=${VERSION_PARTS[1]} | |
PATCH=$((VERSION_PARTS[2] + 1)) | |
NEW_VERSION="$MAJOR.$MINOR.$PATCH" | |
echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT | |
- name: Update version in code | |
run: | | |
sed -i 's/const Version = "[^"]*"/const Version = "${{ steps.increment_version.outputs.new_version }}"/' inferable.go | |
- name: Commit and push changes | |
run: | | |
git config --local user.email "github-actions[bot]@users.noreply.github.com" | |
git config --local user.name "github-actions[bot]" | |
git commit -am "Bump sdk-go version to ${{ steps.increment_version.outputs.new_version }}" | |
git push | |
- name: Create Git tag | |
run: | | |
git tag sdk-go/v${{ steps.increment_version.outputs.new_version }} | |
git push origin sdk-go/v${{ steps.increment_version.outputs.new_version }} |