You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
229 lines
8.7 KiB
229 lines
8.7 KiB
name: macOS
|
|
|
|
on:
|
|
workflow_call:
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
# This job is mainly to make sure Notes will compile with Qt from homebrew's repository.
|
|
# So it doesn't make much sense to have different build types other than 'debug' here.
|
|
# The release dmg is built using aqtinstall instead (the job below this one).
|
|
build-homebrew:
|
|
name: Build (${{ matrix.build-type }}, homebrew (qt${{ matrix.qt-version-major }}), ${{ matrix.os }})
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- os: macos-12
|
|
qt-version-major: 5
|
|
build-type: debug
|
|
|
|
- os: macos-12
|
|
qt-version-major: 6
|
|
build-type: debug
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Install Qt ${{ matrix.qt-version-major }} (homebrew)
|
|
env:
|
|
# TODO: remove once https://github.com/actions/setup-python/issues/577 gets fixed.
|
|
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
|
|
run: |
|
|
brew update
|
|
brew install ninja qt@${{ matrix.qt-version-major }}
|
|
|
|
- name: Configure Qt ${{ matrix.qt-version-major }} (homebrew)
|
|
run: |
|
|
brew link qt@${{ matrix.qt-version-major }}
|
|
cat << EOF
|
|
LDFLAGS="-L/usr/local/opt/qt@${{ matrix.qt-version-major }}/lib"
|
|
export CPPFLAGS="-I/usr/local/opt/qt@${{ matrix.qt-version-major }}/include"
|
|
export PATH="/usr/local/opt/qt@${{ matrix.qt-version-major }}/bin:$PATH"
|
|
EOF >> ~/.bashrc
|
|
|
|
- name: Setup CLang problem matcher
|
|
# Technically, this action only supports GCC, but it seems to work well for Clang too.
|
|
if: matrix.build-type == 'debug'
|
|
uses: ammaraskar/gcc-problem-matcher@0.3.0
|
|
|
|
- name: Build (${{ matrix.build-type }})
|
|
env:
|
|
VERBOSE: 1
|
|
run: |
|
|
export CMAKE_BUILD_PARALLEL_LEVEL=$(sysctl -n hw.logicalcpu)
|
|
cmake . --warn-uninitialized --warn-unused-vars \
|
|
-G Ninja -B build \
|
|
-DCMAKE_BUILD_TYPE=${{ matrix.build-type }} \
|
|
-DCMAKE_PREFIX_PATH="$(brew --prefix qt@${{ matrix.qt-version-major }})" \
|
|
-DPRO_VERSION=OFF
|
|
cmake --build build
|
|
|
|
# Build the dmg disk image using the official Qt 5 release downloaded by aqtinstall.
|
|
# This is also done for Linux and Windows, just to make sure we use the exact same Qt version across all three OSes.
|
|
#
|
|
# NOTE: This job uses a fixed Qt version (set in the 'qt-version' key below)!
|
|
# So, remember to keep it updated whenever a new Qt version is available on aqtinstall.
|
|
dmg-aqtinstall:
|
|
name: dmg (${{ matrix.build-type }}, Qt ${{ matrix.qt-version }}, ${{ matrix.os }})
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- os: macos-11
|
|
qt-version: 5.15.2
|
|
build-type: release
|
|
|
|
- os: macos-11
|
|
qt-version: 6.5.2
|
|
build-type: release
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Setup variables
|
|
id: vars
|
|
run: |
|
|
set -x
|
|
version=$(grep -Em1 '\bAPP_VERSION' CMakeLists.txt | sed -r 's/.*APP_VERSION +//; s/ *)//')
|
|
if [ -z "${version}" ]
|
|
then
|
|
echo 'Failed to extract app version from CMakeLists.txt.'
|
|
exit 1
|
|
fi
|
|
if [ '${{ github.ref_type }}' != 'tag' ]
|
|
then
|
|
version="${version}+g${GITHUB_SHA::7}"
|
|
fi
|
|
arches='x86_64'
|
|
if [[ '${{ matrix.qt-version }}' == 6.* ]]
|
|
then
|
|
arches+='-arm64'
|
|
fi
|
|
artifact_name="Notes_${version}-Qt${{ matrix.qt-version }}-${arches}"
|
|
if [ '${{ matrix.build-type }}' == 'debug' ]
|
|
then
|
|
file_name="${artifact_name}-debug.dmg"
|
|
else
|
|
file_name="${artifact_name}.dmg"
|
|
fi
|
|
echo "version=${version}" >> "${GITHUB_OUTPUT}"
|
|
echo "artifact_name=${artifact_name}" >> "${GITHUB_OUTPUT}"
|
|
echo "file_name=${file_name}" >> "${GITHUB_OUTPUT}"
|
|
|
|
- name: Install Qt ${{ matrix.qt-version }} (aqtinstall)
|
|
uses: jurplel/install-qt-action@v3
|
|
with:
|
|
version: ${{ matrix.qt-version }}
|
|
cache: true
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
brew update
|
|
brew install create-dmg ninja
|
|
|
|
- name: Build (${{ matrix.build-type }})
|
|
env:
|
|
# Only commercial Qt 5 supports targeting Apple Silicon at the moment:
|
|
# https://www.qt.io/blog/qt-on-apple-silicon
|
|
TARGET_ARCH: ${{ startsWith(matrix.qt-version, '6.') && 'x86_64;arm64' || 'x86_64' }}
|
|
VERBOSE: 1
|
|
run: |
|
|
export CMAKE_BUILD_PARALLEL_LEVEL=$(sysctl -n hw.logicalcpu)
|
|
cmake . --warn-uninitialized --warn-unused-vars \
|
|
-B build -G Ninja \
|
|
-DCMAKE_BUILD_TYPE=${{ matrix.build-type }} \
|
|
-DGIT_REVISION=${{ github.ref_type != 'tag' && 'ON' || 'OFF' }} \
|
|
-DCMAKE_OSX_ARCHITECTURES="${{ env.TARGET_ARCH }}" \
|
|
-DPRO_VERSION=OFF
|
|
cmake --build build
|
|
|
|
- name: (FIXME) Run qmllint
|
|
if: startsWith(matrix.qt-version, '6.')
|
|
run: |
|
|
cmake --build build --target all_qmllint || true
|
|
|
|
- name: Install (${{ matrix.build-type }})
|
|
run: |
|
|
cmake --install build --prefix .
|
|
|
|
- name: Deploy (${{ matrix.build-type }})
|
|
run: |
|
|
cd build
|
|
plutil -insert NSRequiresAquaSystemAppearance -bool true Notes.app/Contents/Info.plist
|
|
# Rename the app folder to "Notes Better", so it doesn't conflict with macOS' "Notes" app.
|
|
mv Notes.app 'Notes Better.app'
|
|
macdeployqt 'Notes Better.app' -qmldir=../src/qml -appstore-compliant
|
|
|
|
- name: Remove unnecessary Qt plugins and libraries
|
|
run: |
|
|
set -x
|
|
set -e
|
|
cd 'build/Notes Better.app'
|
|
if [[ '${{ matrix.qt-version }}' == 5.* ]]
|
|
then
|
|
# The bearer plugin has caused problems for us in the past. Plus, it was removed altogether in Qt 6.
|
|
rm -rv Contents/PlugIns/bearer
|
|
fi
|
|
|
|
- name: Import signing certificate
|
|
if: github.repository == 'nuttyartist/notes' && github.event_name != 'pull_request'
|
|
run: |
|
|
openssl base64 -d -out cert.p12 <<< '${{ secrets.MACOS_CERTIFICATE }}'
|
|
security create-keychain -p '${{ secrets.KEYCHAIN_PWD }}' nuttyartist/notes
|
|
security default-keychain -s nuttyartist/notes
|
|
security unlock-keychain -p '${{ secrets.KEYCHAIN_PWD }}' nuttyartist/notes
|
|
security -q import cert.p12 -f pkcs12 -k nuttyartist/notes -P '${{ secrets.MACOS_CERTIFICATE_PWD }}' -T /usr/bin/codesign -x
|
|
security set-key-partition-list -S 'apple-tool:,apple:' -s -k '${{ secrets.KEYCHAIN_PWD }}' nuttyartist/notes
|
|
|
|
- name: Sign
|
|
if: github.repository == 'nuttyartist/notes' && github.event_name != 'pull_request'
|
|
run: |
|
|
codesign --deep --force --verify --verbose --sign Mamistvalove --options runtime 'build/Notes Better.app'
|
|
|
|
- name: Build dmg (${{ matrix.build-type }})
|
|
run: |
|
|
cd build
|
|
create-dmg \
|
|
--no-internet-enable \
|
|
--format ULFO \
|
|
--background ../packaging/macos/dmg-background.png \
|
|
--hide-extension 'Notes Better.app' \
|
|
--icon 'Notes Better.app' 180 170 \
|
|
--icon-size 160 \
|
|
--text-size 12 \
|
|
--volname Notes \
|
|
--volicon ../src/images/notes_icon.icns \
|
|
--window-size 660 400 \
|
|
--app-drop-link 480 170 \
|
|
'${{ steps.vars.outputs.file_name }}' \
|
|
'Notes Better.app'
|
|
|
|
- name: Notarize
|
|
if: github.repository == 'nuttyartist/notes' && github.event_name != 'pull_request'
|
|
run: |
|
|
xcrun notarytool submit \
|
|
--apple-id '${{ secrets.NOTARIZATION_USERNAME }}' \
|
|
--password '${{ secrets.NOTARIZATION_PASSWORD }}' \
|
|
--team-id '${{ secrets.NOTARIZATION_TEAM }}' \
|
|
--wait \
|
|
'build/${{ steps.vars.outputs.file_name }}'
|
|
|
|
- name: Staple
|
|
if: github.repository == 'nuttyartist/notes' && github.event_name != 'pull_request'
|
|
run: |
|
|
xcrun stapler staple 'build/${{ steps.vars.outputs.file_name }}'
|
|
|
|
- name: Upload dmg artifact (${{ matrix.build-type }})
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
if-no-files-found: error
|
|
name: ${{ steps.vars.outputs.artifact_name }}-${{ runner.os }}-${{ matrix.build-type }}
|
|
path: build/${{ steps.vars.outputs.file_name }}
|