From 3eb7bd776e7c206fe230bf23cc83c861676832dd Mon Sep 17 00:00:00 2001 From: buchwasa <17461354+buchwasa@users.noreply.github.com> Date: Tue, 22 Mar 2022 21:42:31 -0400 Subject: [PATCH 1/2] dependencies: update Microsoft.NET.Test.Sdk and Avalonia The upcoming specification of a macOS runtime led to the need to update the Microsoft.NET.Test.Sdk package. The old version, when combined with this specification, caused dependent packages to be downgraded, which resulted in NuGet errors. Upgrading to the latest version resolved this issue. Additionally, Avalonia has been upgraded to the latest version, which was necessitated by the upcoming changes to support osx-arm64. --- .../Atlassian.Bitbucket.Tests.csproj | 2 +- src/shared/Core.Tests/Core.Tests.csproj | 2 +- src/shared/Core.UI.Avalonia/Core.UI.Avalonia.csproj | 6 +++--- src/shared/GitHub.Tests/GitHub.Tests.csproj | 2 +- src/shared/GitLab.Tests/GitLab.Tests.csproj | 2 +- .../Microsoft.AzureRepos.Tests.csproj | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/shared/Atlassian.Bitbucket.Tests/Atlassian.Bitbucket.Tests.csproj b/src/shared/Atlassian.Bitbucket.Tests/Atlassian.Bitbucket.Tests.csproj index 61f8f2ae50..18d7f90d79 100644 --- a/src/shared/Atlassian.Bitbucket.Tests/Atlassian.Bitbucket.Tests.csproj +++ b/src/shared/Atlassian.Bitbucket.Tests/Atlassian.Bitbucket.Tests.csproj @@ -12,7 +12,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + diff --git a/src/shared/Core.Tests/Core.Tests.csproj b/src/shared/Core.Tests/Core.Tests.csproj index 6028211f92..0bc07acd23 100644 --- a/src/shared/Core.Tests/Core.Tests.csproj +++ b/src/shared/Core.Tests/Core.Tests.csproj @@ -13,7 +13,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + diff --git a/src/shared/Core.UI.Avalonia/Core.UI.Avalonia.csproj b/src/shared/Core.UI.Avalonia/Core.UI.Avalonia.csproj index 766c921afa..a7ade3aaa9 100644 --- a/src/shared/Core.UI.Avalonia/Core.UI.Avalonia.csproj +++ b/src/shared/Core.UI.Avalonia/Core.UI.Avalonia.csproj @@ -11,9 +11,9 @@ - - - + + + diff --git a/src/shared/GitHub.Tests/GitHub.Tests.csproj b/src/shared/GitHub.Tests/GitHub.Tests.csproj index 3caa998ed0..13408d24fd 100644 --- a/src/shared/GitHub.Tests/GitHub.Tests.csproj +++ b/src/shared/GitHub.Tests/GitHub.Tests.csproj @@ -12,7 +12,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + diff --git a/src/shared/GitLab.Tests/GitLab.Tests.csproj b/src/shared/GitLab.Tests/GitLab.Tests.csproj index 341b7bc51b..3212501c7d 100644 --- a/src/shared/GitLab.Tests/GitLab.Tests.csproj +++ b/src/shared/GitLab.Tests/GitLab.Tests.csproj @@ -12,7 +12,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + diff --git a/src/shared/Microsoft.AzureRepos.Tests/Microsoft.AzureRepos.Tests.csproj b/src/shared/Microsoft.AzureRepos.Tests/Microsoft.AzureRepos.Tests.csproj index cb620ba3b9..f10e3ddda9 100644 --- a/src/shared/Microsoft.AzureRepos.Tests/Microsoft.AzureRepos.Tests.csproj +++ b/src/shared/Microsoft.AzureRepos.Tests/Microsoft.AzureRepos.Tests.csproj @@ -12,7 +12,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + From 81501c0585db76ffe4c7babfd47631e38b01af74 Mon Sep 17 00:00:00 2001 From: buchwasa <17461354+buchwasa@users.noreply.github.com> Date: Tue, 22 Mar 2022 21:28:36 -0400 Subject: [PATCH 2/2] macos: build arm-64 Add support for building osx-arm64 in addition to osx-x64 to produce native M1 binaries. --- .github/workflows/release.yml | 57 ++++++++++++++----- src/osx/Installer.Mac/Installer.Mac.csproj | 4 +- src/osx/Installer.Mac/build.sh | 23 +++++++- src/osx/Installer.Mac/dist.sh | 27 ++++++++- ...istribution.xml => distribution.arm64.xml} | 2 +- src/osx/Installer.Mac/distribution.x64.xml | 21 +++++++ src/osx/Installer.Mac/layout.sh | 23 +++++++- .../Atlassian.Bitbucket.UI.Avalonia.csproj | 2 +- .../Git-Credential-Manager.csproj | 2 +- .../GitHub.UI.Avalonia.csproj | 2 +- .../GitLab.UI.Avalonia.csproj | 2 +- 11 files changed, 139 insertions(+), 26 deletions(-) rename src/osx/Installer.Mac/{distribution.xml => distribution.arm64.xml} (93%) create mode 100644 src/osx/Installer.Mac/distribution.x64.xml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e15d88394c..db6dc6807d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,6 +12,9 @@ jobs: osx-build: name: Build macOS runs-on: macos-latest + strategy: + matrix: + runtime: [ osx-x64, osx-arm64 ] steps: - uses: actions/checkout@v3 with: @@ -27,7 +30,9 @@ jobs: - name: Build run: | - dotnet build --configuration=MacRelease + dotnet build src/osx/Installer.Mac/*.csproj \ + --configuration=MacRelease --no-self-contained \ + --runtime=${{ matrix.runtime }} - name: Run macOS unit tests run: | @@ -35,7 +40,9 @@ jobs: - name: Lay out payload and symbols run: | - src/osx/Installer.Mac/layout.sh --configuration=MacRelease --output=payload --symbol-output=symbols + src/osx/Installer.Mac/layout.sh \ + --configuration=MacRelease --output=payload \ + --symbol-output=symbols --runtime=${{ matrix.runtime }} - name: Create keychain env: @@ -58,7 +65,7 @@ jobs: - name: Upload macOS artifacts uses: actions/upload-artifact@v3 with: - name: tmp.osx-build + name: tmp.${{ matrix.runtime }}-build path: | payload symbols @@ -67,6 +74,9 @@ jobs: name: Sign macOS payload # ESRP service requires signing to run on Windows runs-on: windows-latest + strategy: + matrix: + runtime: [ osx-x64, osx-arm64 ] needs: osx-build steps: - name: Check out repository @@ -75,7 +85,7 @@ jobs: - name: Download payload uses: actions/download-artifact@v3 with: - name: tmp.osx-build + name: tmp.${{ matrix.runtime }}-build - name: Zip unsigned payload shell: pwsh @@ -109,7 +119,9 @@ jobs: APPLE_KEY_CODE: ${{ secrets.APPLE_KEY_CODE }} APPLE_SIGNING_OP_CODE: ${{ secrets.APPLE_SIGNING_OPERATION_CODE }} run: | - python .github\run_esrp_signing.py payload $env:APPLE_KEY_CODE $env:APPLE_SIGNING_OP_CODE --params 'Hardening' '--options=runtime' + python .github\run_esrp_signing.py payload ` + $env:APPLE_KEY_CODE $env:APPLE_SIGNING_OP_CODE ` + --params 'Hardening' '--options=runtime' - name: Unzip signed payload shell: pwsh @@ -120,13 +132,16 @@ jobs: - name: Upload signed payload uses: actions/upload-artifact@v3 with: - name: osx-payload-sign + name: ${{ matrix.runtime }}-payload-sign path: | signed osx-pack: name: Package macOS payload runs-on: macos-latest + strategy: + matrix: + runtime: [ osx-x64, osx-arm64 ] needs: osx-payload-sign steps: - name: Check out repository @@ -147,20 +162,24 @@ jobs: - name: Download signed payload uses: actions/download-artifact@v3 with: - name: osx-payload-sign + name: ${{ matrix.runtime }}-payload-sign - name: Create component package run: | - src/osx/Installer.Mac/pack.sh --payload=payload --version=$GitBuildVersionSimple --output=components/com.microsoft.gitcredentialmanager.component.pkg + src/osx/Installer.Mac/pack.sh --payload=payload \ + --version=$GitBuildVersionSimple \ + --output=components/com.microsoft.gitcredentialmanager.component.pkg - name: Create product archive run: | - src/osx/Installer.Mac/dist.sh --package-path=components --version=$GitBuildVersionSimple --output=pkg/gcm-osx-x64-$GitBuildVersionSimple.pkg || exit 1 + src/osx/Installer.Mac/dist.sh --package-path=components \ + --version=$GitBuildVersionSimple --runtime=${{ matrix.runtime }} \ + --output=pkg/gcm-${{ matrix.runtime }}-$GitBuildVersionSimple.pkg || exit 1 - name: Upload package uses: actions/upload-artifact@v3 with: - name: tmp.osx-pack + name: tmp.${{ matrix.runtime }}-pack path: | pkg @@ -168,6 +187,9 @@ jobs: name: Sign and notarize macOS package # ESRP service requires signing to run on Windows runs-on: windows-latest + strategy: + matrix: + runtime: [ osx-x64, osx-arm64 ] needs: osx-pack steps: - name: Check out repository @@ -176,7 +198,7 @@ jobs: - name: Download unsigned package uses: actions/download-artifact@v3 with: - name: tmp.osx-pack + name: tmp.${{ matrix.runtime }}-pack path: pkg - name: Zip unsigned package @@ -236,7 +258,7 @@ jobs: - name: Publish signed package uses: actions/upload-artifact@v3 with: - name: osx-sign + name: ${{ matrix.runtime }}-sign path: signed/*.pkg # ================================ @@ -468,8 +490,12 @@ jobs: - name: Archive macOS payload and symbols run: | mkdir osx-payload-and-symbols - tar -C osx-payload-sign -czf osx-payload-and-symbols/gcm-osx-x64-$GitBuildVersionSimple.tar.gz . - tar -C tmp.osx-build/symbols -czf osx-payload-and-symbols/gcm-osx-x64-$GitBuildVersionSimple-symbols.tar.gz . + + tar -C osx-x64-payload-sign -czf osx-payload-and-symbols/gcm-osx-x64-$GitBuildVersionSimple.tar.gz . + tar -C tmp.osx-x64-build/symbols -czf osx-payload-and-symbols/gcm-osx-x64-$GitBuildVersionSimple-symbols.tar.gz . + + tar -C osx-arm64-payload-sign -czf osx-payload-and-symbols/gcm-osx-arm64-$GitBuildVersionSimple.tar.gz . + tar -C tmp.osx-arm64-build/symbols -czf osx-payload-and-symbols/gcm-osx-arm64-$GitBuildVersionSimple-symbols.tar.gz . - name: Archive Windows payload and symbols shell: pwsh @@ -527,7 +553,8 @@ jobs: uploadDirectoryToRelease('win-x86-payload-and-symbols'), // Upload macOS artifacts - uploadDirectoryToRelease('osx-sign'), + uploadDirectoryToRelease('osx-x64-sign'), + uploadDirectoryToRelease('osx-arm64-sign'), uploadDirectoryToRelease('osx-payload-and-symbols'), // Upload Linux artifacts diff --git a/src/osx/Installer.Mac/Installer.Mac.csproj b/src/osx/Installer.Mac/Installer.Mac.csproj index 685862ff54..f42bd33336 100644 --- a/src/osx/Installer.Mac/Installer.Mac.csproj +++ b/src/osx/Installer.Mac/Installer.Mac.csproj @@ -21,8 +21,8 @@ - - + + diff --git a/src/osx/Installer.Mac/build.sh b/src/osx/Installer.Mac/build.sh index 816c621ec4..e52419601b 100755 --- a/src/osx/Installer.Mac/build.sh +++ b/src/osx/Installer.Mac/build.sh @@ -22,6 +22,10 @@ case "$i" in CONFIGURATION="${i#*=}" shift # past argument=value ;; + --runtime=*) + RUNTIME="${i#*=}" + shift + ;; --version=*) VERSION="${i#*=}" shift # past argument=value @@ -38,6 +42,21 @@ if [ -z "$VERSION" ]; then die "--version was not set" fi +if [ -z "$RUNTIME" ]; then + TEST_RUNTIME=`uname -m` + case $TEST_RUNTIME in + "x86_64") + RUNTIME="osx-x64" + ;; + "arm64") + RUNTIME="osx-arm64" + ;; + *) + die "Unknown runtime '$TEST_RUNTIME'" + ;; + esac +fi + OUTDIR="$INSTALLER_OUT/pkg/$CONFIGURATION" PAYLOAD="$OUTDIR/payload" COMPONENTDIR="$OUTDIR/components" @@ -45,8 +64,8 @@ COMPONENTOUT="$COMPONENTDIR/com.microsoft.gitcredentialmanager.component.pkg" DISTOUT="$OUTDIR/gcm-osx-x64-$VERSION.pkg" # Layout and pack -"$INSTALLER_SRC/layout.sh" --configuration="$CONFIGURATION" --output="$PAYLOAD" || exit 1 +"$INSTALLER_SRC/layout.sh" --configuration="$CONFIGURATION" --output="$PAYLOAD" --runtime="$RUNTIME" || exit 1 "$INSTALLER_SRC/pack.sh" --payload="$PAYLOAD" --version="$VERSION" --output="$COMPONENTOUT" || exit 1 -"$INSTALLER_SRC/dist.sh" --package-path="$COMPONENTDIR" --version="$VERSION" --output="$DISTOUT" || exit 1 +"$INSTALLER_SRC/dist.sh" --package-path="$COMPONENTDIR" --version="$VERSION" --output="$DISTOUT" --runtime="$RUNTIME" || exit 1 echo "Build of Installer.Mac complete." diff --git a/src/osx/Installer.Mac/dist.sh b/src/osx/Installer.Mac/dist.sh index 7492315839..c1f5b93288 100755 --- a/src/osx/Installer.Mac/dist.sh +++ b/src/osx/Installer.Mac/dist.sh @@ -11,7 +11,6 @@ SRC="$ROOT/src" OUT="$ROOT/out" INSTALLER_SRC="$SRC/osx/Installer.Mac" RESXPATH="$INSTALLER_SRC/resources" -DISTPATH="$INSTALLER_SRC/distribution.xml" # Product information IDENTIFIER="com.microsoft.gitcredentialmanager.dist" @@ -32,6 +31,10 @@ case "$i" in DISTOUT="${i#*=}" shift # past argument=value ;; + --runtime=*) + RUNTIME="${i#*=}" + shift + ;; *) # unknown option ;; @@ -50,6 +53,28 @@ fi if [ -z "$DISTOUT" ]; then die "--output was not set" fi +if [ -z "$RUNTIME" ]; then + TEST_RUNTIME=`uname -m` + case $TEST_RUNTIME in + "x86_64") + RUNTIME="osx-x64" + ;; + "arm64") + RUNTIME="osx-arm64" + ;; + *) + die "Unknown runtime '$TEST_RUNTIME'" + ;; + esac +fi + +echo "Building for runtime '$RUNTIME'" + +if [ "$RUNTIME" == "osx-x64"]; then + DISTPATH="$INSTALLER_SRC/distribution.x64.xml" +else + DISTPATH="$INSTALLER_SRC/distribution.arm64.xml" +fi # Cleanup any old package if [ -e "$DISTOUT" ]; then diff --git a/src/osx/Installer.Mac/distribution.xml b/src/osx/Installer.Mac/distribution.arm64.xml similarity index 93% rename from src/osx/Installer.Mac/distribution.xml rename to src/osx/Installer.Mac/distribution.arm64.xml index 6573975135..531bdbe334 100644 --- a/src/osx/Installer.Mac/distribution.xml +++ b/src/osx/Installer.Mac/distribution.arm64.xml @@ -2,7 +2,7 @@ Git Credential Manager - + diff --git a/src/osx/Installer.Mac/distribution.x64.xml b/src/osx/Installer.Mac/distribution.x64.xml new file mode 100644 index 0000000000..45deec2204 --- /dev/null +++ b/src/osx/Installer.Mac/distribution.x64.xml @@ -0,0 +1,21 @@ + + + Git Credential Manager + + + + + + + + + + + + + + + + com.microsoft.gitcredentialmanager.component.pkg + + diff --git a/src/osx/Installer.Mac/layout.sh b/src/osx/Installer.Mac/layout.sh index 288216165a..b9991713d8 100755 --- a/src/osx/Installer.Mac/layout.sh +++ b/src/osx/Installer.Mac/layout.sh @@ -27,7 +27,6 @@ GITLAB_UI_SRC="$SRC/shared/GitLab.UI.Avalonia" # Build parameters FRAMEWORK=net6.0 -RUNTIME=osx-x64 # Parse script arguments for i in "$@" @@ -41,6 +40,10 @@ case "$i" in PAYLOAD="${i#*=}" shift # past argument=value ;; + --runtime=*) + RUNTIME="${i#*=}" + shift # past argument=value + ;; --symbol-output=*) SYMBOLOUT="${i#*=}" ;; @@ -50,6 +53,24 @@ case "$i" in esac done +# Determine a runtime if one was not provided +if [ -z "$RUNTIME" ]; then + TEST_RUNTIME=`uname -m` + case $TEST_RUNTIME in + "x86_64") + RUNTIME="osx-x64" + ;; + "arm64") + RUNTIME="osx-arm64" + ;; + *) + die "Unknown runtime '$TEST_RUNTIME'" + ;; + esac +fi + +echo "Building for runtime '$RUNTIME'" + # Perform pre-execution checks CONFIGURATION="${CONFIGURATION:=Debug}" if [ -z "$PAYLOAD" ]; then diff --git a/src/shared/Atlassian.Bitbucket.UI.Avalonia/Atlassian.Bitbucket.UI.Avalonia.csproj b/src/shared/Atlassian.Bitbucket.UI.Avalonia/Atlassian.Bitbucket.UI.Avalonia.csproj index e1ae6d4af0..a9185278a7 100644 --- a/src/shared/Atlassian.Bitbucket.UI.Avalonia/Atlassian.Bitbucket.UI.Avalonia.csproj +++ b/src/shared/Atlassian.Bitbucket.UI.Avalonia/Atlassian.Bitbucket.UI.Avalonia.csproj @@ -3,7 +3,7 @@ WinExe net6.0 - osx-x64;linux-x64 + osx-x64;linux-x64;osx-arm64 Atlassian.Bitbucket.UI Atlassian.Bitbucket.UI diff --git a/src/shared/Git-Credential-Manager/Git-Credential-Manager.csproj b/src/shared/Git-Credential-Manager/Git-Credential-Manager.csproj index 10f598f617..441ee82bcf 100644 --- a/src/shared/Git-Credential-Manager/Git-Credential-Manager.csproj +++ b/src/shared/Git-Credential-Manager/Git-Credential-Manager.csproj @@ -4,7 +4,7 @@ Exe net6.0 net472;net6.0 - win-x86;osx-x64;linux-x64 + win-x86;osx-x64;linux-x64;osx-arm64 x86 git-credential-manager-core GitCredentialManager diff --git a/src/shared/GitHub.UI.Avalonia/GitHub.UI.Avalonia.csproj b/src/shared/GitHub.UI.Avalonia/GitHub.UI.Avalonia.csproj index d1e0401189..828677fcca 100644 --- a/src/shared/GitHub.UI.Avalonia/GitHub.UI.Avalonia.csproj +++ b/src/shared/GitHub.UI.Avalonia/GitHub.UI.Avalonia.csproj @@ -3,7 +3,7 @@ WinExe net6.0 - osx-x64;linux-x64 + osx-x64;linux-x64;osx-arm64 GitHub.UI GitHub.UI diff --git a/src/shared/GitLab.UI.Avalonia/GitLab.UI.Avalonia.csproj b/src/shared/GitLab.UI.Avalonia/GitLab.UI.Avalonia.csproj index 0a64307ee1..26927c272b 100644 --- a/src/shared/GitLab.UI.Avalonia/GitLab.UI.Avalonia.csproj +++ b/src/shared/GitLab.UI.Avalonia/GitLab.UI.Avalonia.csproj @@ -3,7 +3,7 @@ WinExe net6.0 - osx-x64;linux-x64 + osx-x64;linux-x64;osx-arm64 GitLab.UI GitLab.UI