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