Skip to content

Commit ea43a9c

Browse files
umbynosper1234
andauthored
Add windows .msi installer to the CI (#1899)
* add step to generate a windows msi installer of the Arduino CLI * remove warning: `warning : Solution properties are only available during IDE builds or when building the solution file from the command line. To turn off this warning set <DefineSolutionProperties>false</DefineSolutionProperties> in your .wixproj` * fix error caused by wix peculiar version constraints: `error CNDL0108: The Product/@Version attribute's value, '0.0.0-test', is not a valid version. Legal version values should look like 'x.x.x.x' where x is an integer from 0 to 65534.` * fix `error LGHT0103: The system cannot find the file 'arduino-cli.exe'` * final adjustments in wix config * exclude prettier from checking the installer config files, prettier does not support xml out of the box * add download links * temporarily disable s3 push and homebrew update for testing * Upload nightly artifacts for testing * add windows check certs * bump to latest windows-sdk and document better specify timestamp algorithm. Apparently this is required in the latest version of the sdk * remove useless job id not used anymore (followup of #1883) * fixed comments * It's useless to use the output from setupmsbuild * use YAML-style syntax * try to uniform the usage of version/tag across the workflow * Revert "Upload nightly artifacts for testing" && "temporarily disable s3 push and homebrew update for testing" This reverts commit 3123dfd. This reverts commit 24fa25c. * Apply suggestions from code review Co-authored-by: per1234 <[email protected]> Co-authored-by: per1234 <[email protected]>
1 parent 57bfabe commit ea43a9c

9 files changed

+328
-31
lines changed

Diff for: .github/workflows/check-certificates.yml

+3
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ jobs:
3636
- identifier: macOS signing certificate # Text used to identify certificate in notifications.
3737
certificate-secret: INSTALLER_CERT_MAC_P12 # Name of the secret that contains the certificate.
3838
password-secret: INSTALLER_CERT_MAC_PASSWORD # Name of the secret that contains the certificate password.
39+
- identifier: Windows signing certificate
40+
certificate-secret: INSTALLER_CERT_WINDOWS_PASSWORD
41+
password-secret: INSTALLER_CERT_WINDOWS_PFX
3942

4043
steps:
4144
- name: Set certificate path environment variable

Diff for: .github/workflows/publish-go-nightly-task.yml

+72-9
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ on:
2020

2121
jobs:
2222
create-nightly-artifacts:
23+
outputs:
24+
version: ${{ steps.get-version.outputs.version }}
2325
runs-on: ubuntu-latest
2426

2527
strategy:
@@ -50,6 +52,12 @@ jobs:
5052
NIGHTLY: true
5153
run: task dist:${{ matrix.os }}
5254

55+
- name: Output Version
56+
id: get-version
57+
env:
58+
NIGHTLY: true
59+
run: echo "::set-output name=version::$(task general:get-version)"
60+
5361
- name: Upload artifacts
5462
uses: actions/upload-artifact@v3
5563
with:
@@ -61,9 +69,6 @@ jobs:
6169
name: Notarize ${{ matrix.artifact.name }}
6270
runs-on: macos-latest
6371
needs: create-nightly-artifacts
64-
outputs:
65-
checksum-darwin_amd64: ${{ steps.re-package.outputs.checksum-darwin_amd64 }}
66-
checksum-darwin_arm64: ${{ steps.re-package.outputs.checksum-darwin_arm64 }}
6772

6873
env:
6974
GON_CONFIG_PATH: gon.config.hcl
@@ -141,15 +146,14 @@ jobs:
141146
gon "${{ env.GON_CONFIG_PATH }}"
142147
143148
- name: Re-package binary
144-
id: re-package
145149
working-directory: ${{ env.DIST_DIR }}
146150
# Repackage the signed binary replaced in place by Gon (ignoring the output zip file)
147151
run: |
148152
# GitHub's upload/download-artifact@v2 actions don't preserve file permissions,
149153
# so we need to add execution permission back until the action is made to do this.
150154
chmod +x "${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/${{ env.PROJECT_NAME }}"
151-
# Use of an array here is required for globbing
152-
PACKAGE_FILENAME=(${{ env.PROJECT_NAME }}_nightly-*${{ matrix.artifact.path }})
155+
VERSION=${{ needs.create-nightly-artifacts.outputs.version }}
156+
PACKAGE_FILENAME=(${{ env.PROJECT_NAME }}_${VERSION}_${{ matrix.artifact.path }})
153157
tar -czvf "$PACKAGE_FILENAME" \
154158
-C "${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/" "${{ env.PROJECT_NAME }}" \
155159
-C ../../ LICENSE.txt
@@ -162,9 +166,68 @@ jobs:
162166
name: ${{ env.ARTIFACT_NAME }}
163167
path: ${{ env.DIST_DIR }}/${{ env.PACKAGE_FILENAME }}
164168

169+
create-windows-installer:
170+
runs-on: windows-latest
171+
needs: create-nightly-artifacts
172+
173+
defaults:
174+
run:
175+
shell: bash
176+
177+
env:
178+
INSTALLER_CERT_WINDOWS_PFX: "/tmp/cert.pfx"
179+
# We are hardcoding the path for signtool because is not present on the windows PATH env var by default.
180+
# Keep in mind that this path could change when upgrading to a new runner version
181+
# https://github.com/actions/runner-images/blob/main/images/win/Windows2022-Readme.md#installed-windows-sdks
182+
SIGNTOOL_PATH: "C:/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x86/signtool.exe"
183+
184+
steps:
185+
- name: Checkout repository
186+
uses: actions/checkout@v3
187+
188+
- name: Download artifacts
189+
uses: actions/download-artifact@v3
190+
with:
191+
name: ${{ env.ARTIFACT_NAME }}
192+
path: ${{ env.DIST_DIR }}
193+
194+
- name: Prepare PATH
195+
uses: microsoft/setup-msbuild@v1
196+
197+
- name: Build MSI
198+
id: buildmsi
199+
run: |
200+
VERSION=${{ needs.create-nightly-artifacts.outputs.version }}
201+
WIX_VERSION="0.0.0" # use 0.0.0 as version for the installer since wix is picky about other alternatives, this only affects nightly builds (error CNDL0242)
202+
PACKAGE_FILENAME="${{ env.PROJECT_NAME }}_${VERSION}_Windows_64bit"
203+
SOURCE_DIR="${GITHUB_WORKSPACE}/${{ env.DIST_DIR }}/${{ env.PROJECT_NAME }}_windows_amd64/"
204+
MSBuild.exe ./installer/cli.wixproj -p:SourceDir="$SOURCE_DIR" -p:OutputPath="${GITHUB_WORKSPACE}/${{ env.DIST_DIR }}" -p:OutputName="$PACKAGE_FILENAME" -p:ProductVersion="$WIX_VERSION"
205+
206+
- name: Save Win signing certificate to file
207+
run: echo "${{ secrets.INSTALLER_CERT_WINDOWS_PFX }}" | base64 --decode > ${{ env.INSTALLER_CERT_WINDOWS_PFX}}
208+
209+
- name: Sign MSI
210+
env:
211+
MSI_FILE: ${{ steps.buildmsi.outputs.msi }} # this comes from .installer/cli.wixproj
212+
CERT_PASSWORD: ${{ secrets.INSTALLER_CERT_WINDOWS_PASSWORD }}
213+
run: |
214+
"${{ env.SIGNTOOL_PATH }}" sign -d "Arduino CLI" -f ${{ env.INSTALLER_CERT_WINDOWS_PFX}} -p ${{ env.CERT_PASSWORD }} -fd sha256 -tr http://timestamp.digicert.com -td SHA256 -v "${{ env.MSI_FILE }}"
215+
216+
- name: Upload artifacts
217+
uses: actions/upload-artifact@v3
218+
env:
219+
MSI_FILE: ${{ steps.buildmsi.outputs.msi }}
220+
with:
221+
if-no-files-found: error
222+
name: ${{ env.ARTIFACT_NAME }}
223+
path: ${{ env.MSI_FILE }}
224+
165225
publish-nightly:
166226
runs-on: ubuntu-latest
167-
needs: notarize-macos
227+
needs:
228+
- create-nightly-artifacts
229+
- notarize-macos
230+
- create-windows-installer
168231

169232
steps:
170233
- name: Download artifact
@@ -176,8 +239,8 @@ jobs:
176239
- name: Create checksum file
177240
working-directory: ${{ env.DIST_DIR}}
178241
run: |
179-
TAG="nightly-$(date -u +"%Y%m%d")"
180-
sha256sum ${{ env.PROJECT_NAME }}_${TAG}* > ${TAG}-checksums.txt
242+
VERSION=${{ needs.create-nightly-artifacts.outputs.version }}
243+
sha256sum ${{ env.PROJECT_NAME }}_${VERSION}* > ${VERSION}-checksums.txt
181244
182245
- name: Upload release files on Arduino downloads servers
183246
uses: docker://plugins/s3

Diff for: .github/workflows/release-go-task.yml

+69-8
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ on:
1717

1818
jobs:
1919
create-release-artifacts:
20+
outputs:
21+
version: ${{ steps.get-version.outputs.version }}
2022
runs-on: ubuntu-latest
2123

2224
strategy:
@@ -57,6 +59,10 @@ jobs:
5759
- name: Build
5860
run: task dist:${{ matrix.os }}
5961

62+
- name: Output Version
63+
id: get-version
64+
run: echo "::set-output name=version::$(task general:get-version)"
65+
6066
- name: Upload artifacts
6167
uses: actions/upload-artifact@v3
6268
with:
@@ -68,9 +74,6 @@ jobs:
6874
name: Notarize ${{ matrix.artifact.name }}
6975
runs-on: macos-latest
7076
needs: create-release-artifacts
71-
outputs:
72-
checksum-darwin_amd64: ${{ steps.re-package.outputs.checksum-darwin_amd64 }}
73-
checksum-darwin_arm64: ${{ steps.re-package.outputs.checksum-darwin_arm64 }}
7477

7578
env:
7679
GON_CONFIG_PATH: gon.config.hcl
@@ -148,14 +151,13 @@ jobs:
148151
gon "${{ env.GON_CONFIG_PATH }}"
149152
150153
- name: Re-package binary
151-
id: re-package
152154
working-directory: ${{ env.DIST_DIR }}
153155
# Repackage the signed binary replaced in place by Gon (ignoring the output zip file)
154156
run: |
155157
# GitHub's upload/download-artifact@v2 actions don't preserve file permissions,
156158
# so we need to add execution permission back until the action is made to do this.
157159
chmod +x "${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/${{ env.PROJECT_NAME }}"
158-
TAG="${GITHUB_REF/refs\/tags\//}"
160+
TAG=${{ needs.create-release-artifacts.outputs.version }}
159161
PACKAGE_FILENAME="${{ env.PROJECT_NAME }}_${TAG}_${{ matrix.artifact.path }}"
160162
tar -czvf "$PACKAGE_FILENAME" \
161163
-C "${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/" "${{ env.PROJECT_NAME }}" \
@@ -169,9 +171,68 @@ jobs:
169171
name: ${{ env.ARTIFACT_NAME }}
170172
path: ${{ env.DIST_DIR }}/${{ env.PACKAGE_FILENAME }}
171173

174+
create-windows-installer:
175+
runs-on: windows-latest
176+
needs: create-release-artifacts
177+
178+
defaults:
179+
run:
180+
shell: bash
181+
182+
env:
183+
INSTALLER_CERT_WINDOWS_PFX: "/tmp/cert.pfx"
184+
# We are hardcoding the path for signtool because is not present on the windows PATH env var by default.
185+
# Keep in mind that this path could change when upgrading to a new runner version
186+
# https://github.com/actions/runner-images/blob/main/images/win/Windows2022-Readme.md#installed-windows-sdks
187+
SIGNTOOL_PATH: "C:/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x86/signtool.exe"
188+
189+
steps:
190+
- name: Checkout repository
191+
uses: actions/checkout@v3
192+
193+
- name: Download artifacts
194+
uses: actions/download-artifact@v3
195+
with:
196+
name: ${{ env.ARTIFACT_NAME }}
197+
path: ${{ env.DIST_DIR }}
198+
199+
- name: Prepare PATH
200+
uses: microsoft/setup-msbuild@v1
201+
202+
- name: Build MSI
203+
id: buildmsi
204+
run: |
205+
TAG=${{ needs.create-release-artifacts.outputs.version }}
206+
WIX_TAG="${TAG%%-*}" # removes "-rc*" since wix is not happy with it, this only affects RCs builds (error CNDL0108)
207+
PACKAGE_FILENAME="${{ env.PROJECT_NAME }}_${TAG}_Windows_64bit"
208+
SOURCE_DIR="${GITHUB_WORKSPACE}/${{ env.DIST_DIR }}/${{ env.PROJECT_NAME }}_windows_amd64/"
209+
MSBuild.exe ./installer/cli.wixproj -p:SourceDir="$SOURCE_DIR" -p:OutputPath="${GITHUB_WORKSPACE}/${{ env.DIST_DIR }}" -p:OutputName="$PACKAGE_FILENAME" -p:ProductVersion="$WIX_TAG"
210+
211+
- name: Save Win signing certificate to file
212+
run: echo "${{ secrets.INSTALLER_CERT_WINDOWS_PFX }}" | base64 --decode > ${{ env.INSTALLER_CERT_WINDOWS_PFX}}
213+
214+
- name: Sign MSI
215+
env:
216+
MSI_FILE: ${{ steps.buildmsi.outputs.msi }} # this comes from .installer/cli.wixproj
217+
CERT_PASSWORD: ${{ secrets.INSTALLER_CERT_WINDOWS_PASSWORD }}
218+
run: |
219+
"${{ env.SIGNTOOL_PATH }}" sign -d "Arduino CLI" -f ${{ env.INSTALLER_CERT_WINDOWS_PFX}} -p ${{ env.CERT_PASSWORD }} -fd sha256 -tr http://timestamp.digicert.com -td SHA256 -v "${{ env.MSI_FILE }}"
220+
221+
- name: Upload artifacts
222+
uses: actions/upload-artifact@v3
223+
env:
224+
MSI_FILE: ${{ steps.buildmsi.outputs.msi }}
225+
with:
226+
if-no-files-found: error
227+
name: ${{ env.ARTIFACT_NAME }}
228+
path: ${{ env.MSI_FILE }}
229+
172230
create-release:
173231
runs-on: ubuntu-latest
174-
needs: notarize-macos
232+
needs:
233+
- create-release-artifacts
234+
- notarize-macos
235+
- create-windows-installer
175236

176237
steps:
177238
- name: Download artifact
@@ -183,7 +244,7 @@ jobs:
183244
- name: Create checksum file
184245
working-directory: ${{ env.DIST_DIR}}
185246
run: |
186-
TAG="${GITHUB_REF/refs\/tags\//}"
247+
TAG=${{ needs.create-release-artifacts.outputs.version }}
187248
sha256sum ${{ env.PROJECT_NAME }}_${TAG}* > ${TAG}-checksums.txt
188249
189250
- name: Identify Prerelease
@@ -193,7 +254,7 @@ jobs:
193254
run: |
194255
wget -q -P /tmp https://github.com/fsaintjacques/semver-tool/archive/3.0.0.zip
195256
unzip -p /tmp/3.0.0.zip semver-tool-3.0.0/src/semver >/tmp/semver && chmod +x /tmp/semver
196-
if [[ "$(/tmp/semver get prerel "${GITHUB_REF/refs\/tags\//}")" ]]; then echo "::set-output name=IS_PRE::true"; fi
257+
if [[ "$(/tmp/semver get prerel ${{ needs.create-release-artifacts.outputs.version }} )" ]]; then echo "::set-output name=IS_PRE::true"; fi
197258
198259
- name: Create Github Release and upload artifacts
199260
uses: ncipollo/release-action@v1

Diff for: .prettierignore

+1
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@
88
/arduino/security/testdata/
99
/.licenses/
1010
/site/
11+
/installer/

Diff for: Taskfile.yml

+5
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,11 @@ tasks:
327327
cmds:
328328
- poetry run mkdocs serve
329329

330+
general:get-version:
331+
desc: Returns the version used in the project
332+
cmds:
333+
- echo {{.VERSION}}
334+
330335
vars:
331336
PROJECT_NAME: "arduino-cli"
332337
DIST_DIR: "dist"

Diff for: docs/installation.md

+18-14
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,22 @@ in your [`PATH`](https://en.wikipedia.org/wiki/PATH%5F%28variable%29) or add the
5858

5959
### Latest release
6060

61-
| Platform | | |
62-
| --------- | -------------------- | -------------------- |
63-
| Linux | [32 bit][linux32] | [64 bit][linux64] |
64-
| Linux ARM | [32 bit][linuxarm32] | [64 bit][linuxarm64] |
65-
| Windows | [32 bit][windows32] | [64 bit][windows64] |
66-
| macOS | | [64 bit][macos64] |
67-
| macOS ARM | | [64 bit][macosarm64] |
61+
| Platform | | |
62+
| ----------- | -------------------- | ---------------------- |
63+
| Linux | [32 bit][linux32] | [64 bit][linux64] |
64+
| Linux ARM | [32 bit][linuxarm32] | [64 bit][linuxarm64] |
65+
| Windows exe | [32 bit][windows32] | [64 bit][windows64] |
66+
| Windows msi | | [64 bit][windowsmsi64] |
67+
| macOS | | [64 bit][macos64] |
68+
| macOS ARM | | [64 bit][macosarm64] |
6869

6970
[linux64]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_64bit.tar.gz
7071
[linux32]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_32bit.tar.gz
7172
[linuxarm64]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_ARM64.tar.gz
7273
[linuxarm32]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_ARMv7.tar.gz
7374
[windows64]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Windows_64bit.zip
7475
[windows32]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Windows_32bit.zip
76+
[windowsmsi64]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Windows_64bit.msi
7577
[macos64]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_macOS_64bit.tar.gz
7678
[macosarm64]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_macOS_ARM64.tar.gz
7779

@@ -88,20 +90,22 @@ These are available from the "Assets" sections on the [releases page](https://gi
8890
These builds are generated every day at 01:00 GMT from the `master` branch and should be considered unstable. In order
8991
to get the latest nightly build available for the supported platform, use the following links:
9092

91-
| Platform | | |
92-
| --------- | ---------------------------- | ---------------------------- |
93-
| Linux | [32 bit][linux32-nightly] | [64 bit][linux64-nightly] |
94-
| Linux ARM | [32 bit][linuxarm32-nightly] | [64 bit][linuxarm64-nightly] |
95-
| Windows | [32 bit][windows32-nightly] | [64 bit][windows64-nightly] |
96-
| macOS | | [64 bit][macos64-nightly] |
97-
| macOS ARM | | [64 bit][macosarm64-nightly] |
93+
| Platform | | |
94+
| ----------- | ---------------------------- | ------------------------------ |
95+
| Linux | [32 bit][linux32-nightly] | [64 bit][linux64-nightly] |
96+
| Linux ARM | [32 bit][linuxarm32-nightly] | [64 bit][linuxarm64-nightly] |
97+
| Windows exe | [32 bit][windows32-nightly] | [64 bit][windows64-nightly] |
98+
| Windows msi | | [64 bit][windowsmsi64-nightly] |
99+
| macOS | | [64 bit][macos64-nightly] |
100+
| macOS ARM | | [64 bit][macosarm64-nightly] |
98101

99102
[linux64-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_Linux_64bit.tar.gz
100103
[linux32-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_Linux_32bit.tar.gz
101104
[linuxarm64-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_Linux_ARM64.tar.gz
102105
[linuxarm32-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_Linux_ARMv7.tar.gz
103106
[windows64-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_Windows_64bit.zip
104107
[windows32-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_Windows_32bit.zip
108+
[windowsmsi64-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_Windows_64bit.msi
105109
[macos64-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_macOS_64bit.tar.gz
106110
[macosarm64-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_macOS_ARM64.tar.gz
107111

Diff for: installer/cli.wixproj

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup>
4+
<Configuration>Release</Configuration>
5+
<Platform Condition="'$(Platform)' == ''">x64</Platform>
6+
<!-- "ProductVersion" gets overridden when run with the commandline by the release CI, this is useful to define it if not defined -->
7+
<ProductVersion Condition="'$(ProductVersion)' == ''">0.1.0</ProductVersion>
8+
<!-- "OutputName" gets overridden when run with the commandline by the release CI, it's the name of the output file -->
9+
<OutputName Condition="'$(OutputName)' == ''">$(MSBuildProjectName)</OutputName>
10+
<OutputType>package</OutputType>
11+
<DefineConstants>
12+
$(DefineConstants);
13+
ProductVersion=$(ProductVersion);
14+
</DefineConstants>
15+
<DefineSolutionProperties>false</DefineSolutionProperties>
16+
<WixTargetsPath Condition="'$(WixTargetsPath)' == ''">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
17+
</PropertyGroup>
18+
<ItemGroup>
19+
<!-- path and name of the additional files that contains additional config for the installer generation and needs Compile -->
20+
<Compile Include="cli.wxs"/>
21+
<Compile Include="ui.wxs"/>
22+
</ItemGroup>
23+
<ItemGroup>
24+
<!-- Include directories containing both user-specified output and unzipped release for ease -->
25+
<!-- "SourceDir" is defined when run with the commandline by the release CI, it's the folder containing files to include in the installer -->
26+
<BindInputPaths Include="$(SourceDir)"/>
27+
</ItemGroup>
28+
<ItemGroup>
29+
<!-- https://wixtoolset.org//documentation/manual/v3/wixui/wixui_dialog_library.html -->
30+
<WixExtension Include="WixUIExtension"/>
31+
<!-- we need the following to be able to broadcast the environment vars change -->
32+
<WixExtension Include="WixUtilExtension"/>
33+
</ItemGroup>
34+
<Target Name="SetStepOutput" AfterTargets="Build" Condition="'$(GITHUB_ACTIONS)' != ''">
35+
<!-- Define a GitHub Actions workflow step output containing the target path -->
36+
<Message Importance="high" Text="::set-output name=msi::$(TargetPath)"/>
37+
</Target>
38+
<Import Project="$(WixTargetsPath)"/>
39+
</Project>

0 commit comments

Comments
 (0)