Skip to content

Add unit tests and configure GitHub Actions CI #5

Add unit tests and configure GitHub Actions CI

Add unit tests and configure GitHub Actions CI #5

Workflow file for this run

name: NuGet ThreeByte.LinkLib.UdpLink
on:
pull_request:
branches:
- main
paths:
- "ThreeByte.LinkLib/ThreeByte.LinkLib.UdpLink/**"
types:
- closed
env:
GITHUB_REPO: "three-byte.link-lib"
GITHUB_USER_TOKEN: ${{ secrets.GHPAT }}
PROJECT_PATH: "ThreeByte.LinkLib"
PROJECT_NAME: "ThreeByte.LinkLib.UdpLink"
INITIAL_PACKAGE_VERSION: "1.0.0"
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
jobs:
variables:
name: Build and push Nuget package
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
outputs:
package_new_version: ${{ steps.package_new_version.outputs.package_new_version }}
package_version: ${{ steps.package_version.outputs.package_version }}
first_deploy: ${{ steps.package_version.outputs.first_deploy }}
steps:
- name: GitHub actions Workspace Cleaner
uses: jstone28/runner-workspace-cleaner@v1.0.0
- name: Check labels
uses: docker://agilepathway/pull-request-label-checker:latest
id: check_label
with:
one_of: major,minor,patch
repo_token: ${{ secrets.GHPAT }}
- name: Checkout
uses: actions/checkout@v4
- name: Setup .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: "9.0.x"
- name: Restore dependencies
run: dotnet restore
working-directory: ./${{ env.PROJECT_PATH }}
- name: Build the project
run: dotnet build --configuration Release --no-restore
working-directory: ./${{ env.PROJECT_PATH }}
- name: Get package version
id: package_version
run: |
package_name_lower_case=$(echo ${{ env.PROJECT_NAME }} | tr '[:upper:]' '[:lower:]' )
status_code=$(curl -o /dev/null -s -w "%{http_code}" "https://api.nuget.org/v3-flatcontainer/$package_name_lower_case/index.json")
if [ "$status_code" -eq 200 ]; then
echo "Package '$package_name_lower_case' exists on NuGet.org."
first_deploy="false"
package_version=$(curl -s https://api.nuget.org/v3-flatcontainer/$package_name_lower_case/index.json | grep -o '"[0-9]\+\(\.[0-9]\+\)*"' | tail -n 1 | tr -d '"')
else
echo "Package '$package_name_lower_case' does NOT exist on NuGet.org."
package_version=${{ env.INITIAL_PACKAGE_VERSION }}
first_deploy="true"
fi
echo -e "package_version\t= $package_version"
echo -e "first_deploy\t= $first_deploy"
echo "package_version=$package_version" >> $GITHUB_OUTPUT
echo "first_deploy=$first_deploy" >> $GITHUB_OUTPUT
- name: Get labels for closed PR
if: github.event_name != 'workflow_dispatch'
run: |
PR_NUMBER=${{ github.event.pull_request.number }}
REPO="${{ github.repository }}"
label=$(curl -s -H "Authorization: token ${{ env.GITHUB_USER_TOKEN }}" \
"https://api.github.com/repos/$REPO/issues/$PR_NUMBER/labels" | jq -r '.[].name')
echo "Label for PR #$PR_NUMBER: $label"
echo "label=$label" >> $GITHUB_ENV
- name: Get new version
id: package_new_version
run: |
label_name=${{ env.label }}
echo -e "Label name:\t\t $label_name"
major=$(echo ${{ steps.package_version.outputs.package_version }} | cut -d "." -f1)
minor=$(echo ${{ steps.package_version.outputs.package_version }} | cut -d "." -f2)
patch=$(echo ${{ steps.package_version.outputs.package_version }} | cut -d "." -f3)
echo -e "Current version:\t $major.$minor.$patch"
if [[ $label_name == 'major' ]]; then
major=$((major+1))
if [[ $minor -ne 0 ]]; then
minor=0
fi
if [[ $patch -ne 0 ]]; then
patch=0
fi
elif [[ $label_name == 'minor' ]]; then
minor=$((minor+1))
if [[ $patch -ne 0 ]]; then
patch=0
fi
elif [[ $label_name == 'patch' ]]; then
patch=$((patch+1))
fi
if [ ${{ steps.package_version.outputs.first_deploy }} == "true" ]; then
package_new_version=${{ env.INITIAL_PACKAGE_VERSION }}
else
package_new_version=$major"."$minor"."$patch
fi
echo -e "Package new version:\t\t $package_new_version"
echo "package_new_version=$package_new_version" >> $GITHUB_OUTPUT
- name: Create NuGet Package
run: dotnet pack --configuration Release --no-build --output nupkg --property:Version=${{ steps.package_new_version.outputs.package_new_version }}
working-directory: ./${{ env.PROJECT_PATH }}/${{ env.PROJECT_NAME }}
- name: Publish Nuget Package
run: |
dotnet nuget push ./${{ env.PROJECT_PATH }}/${{ env.PROJECT_NAME }}/nupkg/${{ env.PROJECT_NAME }}.${{ steps.package_new_version.outputs.package_new_version }}.nupkg \
--api-key ${{ secrets.NUGET_API_KEY }} \
--source https://api.nuget.org/v3/index.json --skip-duplicate