name: macos-homebrew concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true on: workflow_dispatch: push: branches: - dev - master # - staged paths-ignore: - 'docs/**' # - ".github/**" - "howto/**" - "*.md" - ".clang-format" jobs: build: name: Build runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-12,macos-13] qt_ver: [ 6.4.3 ] qt_arch: [clang_64] env: targetName: GoldenDict version: 23.07.25 version-suffix: alpha prerelease: true steps: # macos 11.0 默认环境变了,要指定 - name: prepare env if: ${{ matrix.os == 'macos-11' }} run: | softwareupdate --all --install --force sudo xcode-select --print-path sudo xcode-select --switch /Library/Developer/CommandLineTools - uses: actions/checkout@v3 with: fetch-depth: 0 submodules: true - name: Set outputs id: githash run: | echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT - name: install deps on macos run: | brew install pcre2 harfbuzz freetype brew install cmake ninja python brew install automake brew install autoconf brew install libtool brew install opencc brew install speex brew install wavpack brew install automake fdk-aac git lame libass libtool libvorbis libvpx opus sdl shtool texi2html theora wget x264 x265 xvid nasm brew install speex brew tap homebrew-ffmpeg/ffmpeg brew install homebrew-ffmpeg/ffmpeg/ffmpeg --with-speex brew install libiconv brew install lzo bzip2 brew install libogg brew install zstd lzip brew install libvorbis brew install hunspell git clone https://github.com/xiaoyifang/eb.git cd eb && ./configure && make -j 8 && sudo make install && cd .. brew install xz lzo brew install pkg-config brew install create-dmg brew install xapian brew install libzim # brew reinstall icu4c brew install dylibbundler find /opt -name libicudata.72.dylib find /usr/local -name libicudata.72.dylib find /opt -name libzstd.1.dylib find /usr/local -name libzstd.1.dylib brew install dylibbundler find /opt -name liblzma.5.dylib find /usr/local -name liblzma.5.dylib - name: version-file shell: bash env: VAR_SUFFIX: ${{env.version-suffix}} VAR_VERSION: ${{env.version}} run: | current_tag=$(git rev-parse --short=8 HEAD) release_date=$(date +'%Y%m%d') echo "$VAR_VERSION-$VAR_SUFFIX.$release_date.$current_tag">version.txt cat version.txt echo "$version" - name: vcpkg install shell: bash run: | vcpkg install breakpad - name: copy vcpkg packages into winlibs shell: bash run: | ls -al /usr/local/share/vcpkg/packages/breakpad* cp -R /usr/local/share/vcpkg/packages/breakpad*/* thirdparty/breakpad ls -al thirdparty/breakpad/lib - name: Install Qt uses: jurplel/install-qt-action@v3 with: version: ${{ matrix.qt_ver }} arch: ${{ matrix.qt_arch }} modules: qtwebengine qtwebchannel qtpositioning qt5compat qtmultimedia qtimageformats qtspeech - name: compile run: | qmake CONFIG+=release CONFIG+=no_macos_universal CONFIG+=zim_support CONFIG+=use_xapian make -j8 - name: package run: | macdeployqt ${targetName}.app -qmldir=. -verbose=1 otool -L GoldenDict.app/Contents/MacOS/GoldenDict ls -al GoldenDict.app/Contents/Frameworks otool -L GoldenDict.app/Contents/Frameworks/libzim.8.dylib cp -r /usr/local/Cellar/icu4c/7*/lib/libicu*.dylib GoldenDict.app/Contents/Frameworks cp -r /usr/local/Cellar/zstd/1.5.5/lib/libzstd.1.dylib GoldenDict.app/Contents/Frameworks # dylibbundler -of -x GoldenDict.app/Contents/Frameworks/libzim.8.dylib -d GoldenDict.app/Contents/Frameworks/ -p @executable_path/../Frameworks install_name_tool -change "@loader_path/../../../../opt/zstd/lib/libzstd.1.dylib" "@executable_path/../Frameworks/libzstd.1.dylib" GoldenDict.app/Contents/Frameworks/libzim.8.dylib install_name_tool -change "@loader_path/../../../../opt/xz/lib/liblzma.5.dylib" "@executable_path/../Frameworks/liblzma.5.dylib" GoldenDict.app/Contents/Frameworks/libzim.8.dylib install_name_tool -change "@loader_path/../../../../opt/xapian/lib/libxapian.30.dylib" "@executable_path/../Frameworks/libxapian.30.dylib" GoldenDict.app/Contents/Frameworks/libzim.8.dylib install_name_tool -change "@loader_path/../../../../opt/icu4c/lib/libicui18n.73.dylib" "@executable_path/../Frameworks/libicui18n.73.dylib" GoldenDict.app/Contents/Frameworks/libzim.8.dylib install_name_tool -change "@loader_path/../../../../opt/icu4c/lib/libicuuc.73.dylib" "@executable_path/../Frameworks/libicuuc.73.dylib" GoldenDict.app/Contents/Frameworks/libzim.8.dylib dylibbundler -of -x GoldenDict.app/Contents/Frameworks/libicui18n.73.dylib -x GoldenDict.app/Contents/Frameworks/libicudata.73.dylib -x GoldenDict.app/Contents/Frameworks/libicuuc.73.dylib -d GoldenDict.app/Contents/Frameworks/ -p @executable_path/../Frameworks otool -L GoldenDict.app/Contents/Frameworks/libzim.8.dylib otool -L GoldenDict.app/Contents/Frameworks/libxapian.30.dylib otool -L GoldenDict.app/Contents/Frameworks/liblzma.5.dylib codesign --force --deep -s - GoldenDict.app ls -al GoldenDict.app/Contents/Frameworks mkdir tmp mv ${targetName}.app ./tmp # --background "installer_background.png" create-dmg --volname "${targetName} Installer" --volicon "icons/macicon.icns" --window-pos 200 120 --window-size 800 400 --icon-size 100 --icon "${targetName}.app" 200 190 --hide-extension "${targetName}.app" --app-drop-link 600 185 --skip-jenkins "${targetName}.dmg" tmp/ - name: changelog id: changelog run: | previousTag=$(git tag --sort=-creatordate | grep "^v" | sed -n 2p) echo "previousTag : $previousTag" echo "prev_tag=$previousTag" >> $GITHUB_OUTPUT echo "curr_tag=$(git tag --sort=-creatordate | grep "^v" | sed -n 1p)" >> $GITHUB_OUTPUT - name: Set outputs id: vars run: | echo "sha_short=$(git rev-parse --short=8 HEAD)" >> $GITHUB_OUTPUT echo "release_date=$(date +'%Y%m%d')" >> $GITHUB_OUTPUT echo "release_time=$(date +'%H%M%S')" >> $GITHUB_OUTPUT echo "release_time_clock=$(date +'%H:%M:%S')" >> $GITHUB_OUTPUT echo "release_hm=$(date +'%y%m%d')" >> $GITHUB_OUTPUT # tag 上传Release - name: "Build Changelog" id: build_changelog uses: mikepenz/release-changelog-builder-action@v3 with: commitMode: false fromTag: ${{ steps.changelog.outputs.prev_tag }} toTag: "${{ steps.changelog.outputs.curr_tag }}" configurationJson: | { "template": "#{{CHANGELOG}}\n\n
\n🔴 Uncategorized\n\n#{{UNCATEGORIZED}}\n
", "categories": [ { "title": "## 🚀 Features", "labels": ["feature","feat","opt"] }, { "title": "## 🐛 Fixes", "labels": ["fix","bug"] } , { "title": "## 🤖 Github action", "labels": ["action"] } , { "title": "## 🧼 Clean Code", "labels": ["clean"] } ], "label_extractor": [ { "pattern": "([^:]*):.*", "target": "$1", "on_property": "title", "flags": "gu" } ] } - name: uploadRelease uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: ${{ env.targetName }}.dmg asset_name: ${{ matrix.qt_ver }}-${{ env.targetName }}_${{ matrix.os }}_homebrew_${{steps.vars.outputs.release_date}}.dmg tag: v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.sha_short }} overwrite: true release_name: GoldenDict-ng-v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} prerelease: ${{env.prerelease}} body: | #### Install instructions for Windows, macOS and Linux . #### Filename pattern (文件名模式): **[Qt version]-GoldenDict-ng-[OS]-[release-date].[ext]** Qt6.X is recommended for various enhancements. Windows users can use either `****-installer.exe` (for installer) or `****.zip` (unzip and run). The `goldendict.exe` can be dropped into previous installation's folder (if dependencies aren't changed). Linux users can use AppImages. macOS users can use `.dmg` installer. `6.5.1-GoldenDict.exe_windows-2019_20230701.zip` means built with Qt6.5.1, windows/msvc-2019 at 20230701 as a zip archive. #### Build Details AppImage: Ubuntu-20.04 macOS: macOS-12 and macOS-13 Windows: Visual studio 2019 #### Changes ${{steps.build_changelog.outputs.changelog}}