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 61f8f2ae5..18d7f90d7 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 6028211f9..0bc07acd2 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 766c921af..a7ade3aaa 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 3caa998ed..13408d24f 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 341b7bc51..3212501c7 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 cb620ba3b..f10e3ddda 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 e15d88394..db6dc6807 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 685862ff5..f42bd3333 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 816c621ec..e52419601 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 749231583..c1f5b9328 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 657397513..531bdbe33 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 000000000..45deec220
--- /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 288216165..b9991713d 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 e1ae6d4af..a9185278a 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 10f598f61..441ee82bc 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 d1e040118..828677fcc 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 0a64307ee..26927c272 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