generated from jfversluis/Plugin.Maui.Feature
-
-
Notifications
You must be signed in to change notification settings - Fork 7
161 lines (137 loc) · 5.95 KB
/
ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
name: publish
on:
workflow_dispatch: # Allow running the workflow manually from the GitHub UI
push:
branches:
- 'main' # Run the workflow when pushing to the main branch
paths-ignore:
- "**.md"
pull_request:
branches:
- '*' # Run the workflow for all pull requests
release:
types:
- published # Run the workflow when a new GitHub release is published
env:
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
DOTNET_NOLOGO: true
BUILD_CONFIGURATION: Release
NuGetDirectory: ${{ github.workspace}}/nuget
defaults:
run:
shell: pwsh
jobs:
create_nuget:
runs-on: windows-latest
strategy:
matrix:
project:
- src/Plugin.Xamarin.OCR/Plugin.Xamarin.OCR.csproj
- src/Plugin.Maui.OCR/Plugin.Maui.OCR.csproj
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0 # Get all history to allow versioning using MinVer
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Setup MSBuild path
uses: microsoft/setup-msbuild@v2
with:
vs-version: 'latest'
# Install the .NET SDK indicated in the global.json file
- name: Setup .NET
uses: actions/setup-dotnet@v4
- name: Install MAUI workloads (only for MAUI project)
if: contains(matrix.project, 'Plugin.Maui.OCR')
run: dotnet workload install maui-android maui-ios maui-maccatalyst
- name: Determine Version
id: minver
run: |
dotnet tool install --global minver-cli
git fetch --tags
git tag
$version = minver --auto-increment minor --build-metadata build --verbosity trace
echo "PACKAGE_VERSION=$version" >> $GITHUB_ENV
- name: Restore NuGet packages for Xamarin
if: contains(matrix.project, 'Plugin.Xamarin.OCR')
run: msbuild /t:Restore ${{ matrix.project }} -maxcpucount
- name: Build Xamarin
if: contains(matrix.project, 'Plugin.Xamarin.OCR')
run: msbuild /m /t:Build ${{ matrix.project }} /p:Configuration=${{ env.BUILD_CONFIGURATION }} /p:GeneratePackageOnBuild=true /p:PackageVersion=${{ env.PACKAGE_VERSION }} /p:OutputPath=${{ env.NuGetDirectory }} /p:IncludeSymbols=true /p:SymbolPackageFormat=snupkg /p:RestorePackages=false -maxcpucount
- name: Build MAUI
if: contains(matrix.project, 'Plugin.Maui.OCR')
run: dotnet build ${{ matrix.project }} -c ${{ env.BUILD_CONFIGURATION }} -p:Version=${{ env.PACKAGE_VERSION }}
- name: Pack MAUI NuGet Package
if: contains(matrix.project, 'Plugin.Maui.OCR')
run: dotnet pack ${{ matrix.project }} --configuration ${{ env.BUILD_CONFIGURATION }} --output ${{ env.NuGetDirectory }} -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg -p:Version=${{ env.PACKAGE_VERSION }}
# Step to prepare the artifacts by copying *.nupkg and *.snpkg files to a temporary directory
- name: Prepare Artifacts
run: |
mkdir -p ${{ env.NuGetDirectory }}/artifacts
cp ${{ env.NuGetDirectory }}/*.nupkg ${{ env.NuGetDirectory }}/artifacts
cp ${{ env.NuGetDirectory }}/*.snupkg ${{ env.NuGetDirectory }}/artifacts
# Publish the NuGet package as an artifact, so they can be used in the following jobs
- uses: actions/upload-artifact@v3
with:
name: nuget
if-no-files-found: error
retention-days: 7
path: |
${{ env.NuGetDirectory }}/artifacts/*.nupkg
${{ env.NuGetDirectory }}/artifacts/*.snupkg
validate_nuget:
runs-on: windows-latest
needs: [ create_nuget ]
steps:
# Install the .NET SDK indicated in the global.json file
- name: Setup .NET
uses: actions/setup-dotnet@v4
# Download the NuGet package created in the previous job
- uses: actions/download-artifact@v3
with:
name: nuget
path: ${{ env.NuGetDirectory }}
- name: Install nuget validator
run: dotnet tool update Meziantou.Framework.NuGetPackageValidation.Tool --global
# Validate metadata and content of the NuGet package
# https://www.nuget.org/packages/Meziantou.Framework.NuGetPackageValidation.Tool#readme-body-tab
# If some rules are not applicable, you can disable them
# using the --excluded-rules or --excluded-rule-ids option
- name: Validate package
run: meziantou.validate-nuget-package (Get-ChildItem "${{ env.NuGetDirectory }}/*.nupkg")
# run_test:
# runs-on: windows-latest
# steps:
# - uses: actions/checkout@v3
# - name: Setup .NET
# uses: actions/setup-dotnet@v4
# - name: Run tests
# run: dotnet test --configuration ${{ env.BUILD_CONFIGURATION }} --filter 'FullyQualifiedName!~TestBase'
deploy:
# Publish only when creating a GitHub Release
# https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository
# You can update this logic if you want to manage releases differently
if: github.event_name == 'release'
runs-on: windows-latest
needs: [ validate_nuget ]
steps:
# Download the NuGet package created in the previous job
- uses: actions/download-artifact@v3
with:
name: nuget
path: ${{ env.NuGetDirectory }}
# Install the .NET SDK indicated in the global.json file
- name: Setup .NET Core
uses: actions/setup-dotnet@v4
# 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.
- name: Publish NuGet package
run: |
foreach($file in (Get-ChildItem "${{ env.NuGetDirectory }}" -Recurse -Include *.nupkg)) {
dotnet nuget push $file --api-key "${{ secrets.NUGET_API_KEY }}" --source https://api.nuget.org/v3/index.json --skip-duplicate
}