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.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/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/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/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.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/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.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/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
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
-
+