Skip to content

Commit f423f2c

Browse files
authored
Add pipeline for projector (#27)
* Add pipeline for projector * Add test file
1 parent 201345f commit f423f2c

2 files changed

Lines changed: 123 additions & 0 deletions

File tree

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
name: NuGet ThreeByte.LinkLib.Projector
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- main
7+
paths:
8+
- "ThreeByte.LinkLib/ThreeByte.LinkLib.Projector/**"
9+
types:
10+
- closed
11+
12+
env:
13+
GITHUB_REPO: "three-byte.link-lib"
14+
PROJECT_PATH: "ThreeByte.LinkLib"
15+
PROJECT_NAME: "ThreeByte.LinkLib.Projector"
16+
INITIAL_PACKAGE_VERSION: "1.0.0"
17+
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
18+
19+
jobs:
20+
variables:
21+
name: Build and push Nuget package
22+
if: github.event.pull_request.merged == true
23+
runs-on: ubuntu-latest
24+
outputs:
25+
package_new_version: ${{ steps.package_new_version.outputs.package_new_version }}
26+
package_version: ${{ steps.package_version.outputs.package_version }}
27+
first_deploy: ${{ steps.package_version.outputs.first_deploy }}
28+
steps:
29+
- name: GitHub actions Workspace Cleaner
30+
uses: jstone28/runner-workspace-cleaner@v1.0.0
31+
32+
- name: Check labels
33+
uses: docker://agilepathway/pull-request-label-checker:latest
34+
id: check_label
35+
with:
36+
one_of: major,minor,patch
37+
repo_token: ${{ secrets.GHPAT }}
38+
39+
- name: Checkout
40+
uses: actions/checkout@v4
41+
42+
- name: Setup .NET Core
43+
uses: actions/setup-dotnet@v4
44+
with:
45+
dotnet-version: "9.0.x"
46+
47+
- name: Restore dependencies
48+
run: dotnet restore
49+
working-directory: ./${{ env.PROJECT_PATH }}
50+
51+
- name: Build the project
52+
run: dotnet build --configuration Release --no-restore
53+
working-directory: ./${{ env.PROJECT_PATH }}
54+
55+
- name: Get package version
56+
id: package_version
57+
run: |
58+
package_name_lower_case=$(echo ${{ env.PROJECT_NAME }} | tr '[:upper:]' '[:lower:]' )
59+
status_code=$(curl -o /dev/null -s -w "%{http_code}" "https://api.nuget.org/v3-flatcontainer/$package_name_lower_case/index.json")
60+
if [ "$status_code" -eq 200 ]; then
61+
echo "Package '$package_name_lower_case' exists on NuGet.org."
62+
first_deploy="false"
63+
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 '"')
64+
else
65+
echo "Package '$package_name_lower_case' does NOT exist on NuGet.org."
66+
package_version=${{ env.INITIAL_PACKAGE_VERSION }}
67+
first_deploy="true"
68+
fi
69+
echo -e "package_version\t= $package_version"
70+
echo -e "first_deploy\t= $first_deploy"
71+
echo "package_version=$package_version" >> $GITHUB_OUTPUT
72+
echo "first_deploy=$first_deploy" >> $GITHUB_OUTPUT
73+
74+
- name: Get label by PR number
75+
id: get_label_by_pr
76+
uses: octokit/request-action@v2.x
77+
with:
78+
route: GET /repos/Three-Byte/${{ env.GITHUB_REPO }}/pulls/${{ github.event.pull_request.number }}
79+
env:
80+
GITHUB_TOKEN: ${{ secrets.GHPAT }}
81+
82+
- name: Get new version
83+
id: package_new_version
84+
run: |
85+
label_name=$(echo '${{ steps.get_label_by_pr.outputs.data }}' | jq '.labels[0].name' | sed 's/"//g')
86+
echo -e "Label name:\t\t $label_name"
87+
major=$(echo ${{ steps.package_version.outputs.package_version }} | cut -d "." -f1)
88+
minor=$(echo ${{ steps.package_version.outputs.package_version }} | cut -d "." -f2)
89+
patch=$(echo ${{ steps.package_version.outputs.package_version }} | cut -d "." -f3)
90+
echo -e "Current version:\t $major.$minor.$patch"
91+
if [[ $label_name == 'major' ]]; then
92+
major=$((major+1))
93+
if [[ $minor -ne 0 ]]; then
94+
minor=0
95+
fi
96+
if [[ $patch -ne 0 ]]; then
97+
patch=0
98+
fi
99+
elif [[ $label_name == 'minor' ]]; then
100+
minor=$((minor+1))
101+
if [[ $patch -ne 0 ]]; then
102+
patch=0
103+
fi
104+
elif [[ $label_name == 'patch' ]]; then
105+
patch=$((patch+1))
106+
fi
107+
if [ ${{ steps.package_version.outputs.first_deploy }} == "true" ]; then
108+
package_new_version=${{ env.INITIAL_PACKAGE_VERSION }}
109+
else
110+
package_new_version=$major"."$minor"."$patch
111+
fi
112+
echo -e "Package new version:\t\t $package_new_version"
113+
echo "package_new_version=$package_new_version" >> $GITHUB_OUTPUT
114+
115+
- name: Create NuGet Package
116+
run: dotnet pack --configuration Release --no-build --output nupkg --property:Version=${{ steps.package_new_version.outputs.package_new_version }}
117+
working-directory: ./${{ env.PROJECT_PATH }}/${{ env.PROJECT_NAME }}
118+
119+
- name: Publish Nuget Package
120+
run: |
121+
dotnet nuget push ./${{ env.PROJECT_PATH }}/${{ env.PROJECT_NAME }}/nupkg/${{ env.PROJECT_NAME }}.${{ steps.package_new_version.outputs.package_new_version }}.nupkg \
122+
--api-key ${{ secrets.NUGET_API_KEY }} \
123+
--source https://api.nuget.org/v3/index.json --skip-duplicate

ThreeByte.LinkLib/ThreeByte.LinkLib.Projector/.gitkeep

Whitespace-only changes.

0 commit comments

Comments
 (0)