Release All #16
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release All | |
env: | |
version: 24.11.0 | |
prerelease: ${{ !contains(github.ref_name,'master') }} | |
versionSuffix: ${{ !contains(github.ref_name,'master') && 'alpha' || 'Release' }} | |
on: | |
workflow_dispatch: | |
push: | |
branches: | |
- dev | |
- master | |
- experimental | |
paths-ignore: | |
- 'docs/**' | |
- "howto/**" | |
- "*.md" | |
- ".clang-format" | |
jobs: | |
build_macOS: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [macos-13,macos-14] | |
qt_ver: [ 6.6.3, 6.7.3 ] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Install dependencies | |
run: | | |
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=TRUE | |
brew install \ | |
bzip2 \ | |
create-dmg \ | |
hunspell \ | |
libiconv \ | |
libogg \ | |
libvorbis \ | |
libzim \ | |
lzip \ | |
ninja \ | |
opencc \ | |
xapian | |
git clone https://github.com/xiaoyifang/eb.git | |
cd eb && ./configure && make -j 8 && sudo make install && cd .. | |
- name: Install Qt | |
uses: jurplel/install-qt-action@v4 | |
with: | |
version: ${{ matrix.qt_ver }} | |
arch: clang_64 | |
modules: qtwebengine qtwebchannel qtpositioning qt5compat qtmultimedia qtimageformats qtspeech | |
- name: Compile | |
run: | | |
mkdir build_dir | |
cmake -S . -B build_dir \ | |
-G Ninja \ | |
-DWITH_FFMPEG_PLAYER=OFF \ | |
-DWITH_TTS=OFF \ | |
-DCMAKE_BUILD_TYPE=RelWithDebInfo \ | |
-DCMAKE_OSX_DEPLOYMENT_TARGET="12.0" | |
cmake --build build_dir | |
- name: Package | |
run: | | |
cmake --install build_dir/ | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: macOS-${{ matrix.os }}-Qt${{ matrix.qt_ver }} | |
retention-days: 7 | |
path: '*.dmg' | |
build_Windows: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [windows-2022] | |
qt_ver: [ 6.6.3, 6.7.3 ] | |
steps: | |
- name: Install Qt | |
uses: jurplel/install-qt-action@v4 | |
with: | |
version: ${{ matrix.qt_ver }} | |
arch: win64_msvc2019_64 | |
modules: qtwebengine qtwebchannel qtpositioning qt5compat qtmultimedia qtimageformats qtspeech | |
setup-python: 'false' | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Build binaries | |
id: build | |
run: | | |
# Launch-VsDevShell also provides Ninja | |
& 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\Launch-VsDevShell.ps1' ` | |
-SkipAutomaticLocation -Arch amd64 -HostArch amd64 | |
New-Item -Path './build_dir' -ItemType Directory | |
# RelWithDebInfo + msvc's = .pdb file beside program file. | |
cmake -S . -B "./build_dir" ` | |
-G Ninja ` | |
-DCMAKE_C_COMPILER="cl.exe" -DCMAKE_CXX_COMPILER="cl.exe" ` | |
-DCMAKE_BUILD_TYPE=RelWithDebInfo ` | |
-DWITH_FFMPEG_PLAYER=OFF ` | |
-DWITH_VCPKG_BREAKPAD=ON | |
cmake --build "./build_dir" | |
- name: Create packages | |
run: | | |
cd './build_dir' | |
cpack --verbose --trace | |
cd .. | |
pwd | |
- name: Rename files | |
shell: bash | |
run: | | |
# rename installer names to something better | |
namePrefix=$(basename "$(ls ./build_dir/*.7z)" .7z) | |
# note the name will ensure `installer` ranked higher after sorting | |
cd ./build_dir | |
mv "${namePrefix}.7z" "${namePrefix}-Windows-installer.7z" | |
mv "${namePrefix}.exe" "${namePrefix}-Windows-installer.exe" | |
cd ./goldendict | |
mv goldendict.exe "../${namePrefix}-Windows-main-exe-file-only.exe" | |
mv goldendict.pdb "../${namePrefix}-Windows-pdb-debug-file.pdb" | |
cd .. | |
cd .. | |
pwd | |
ls -R | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: Windows-Qt${{ matrix.qt_ver }} | |
if-no-files-found: error | |
retention-days: 7 | |
path: | | |
./build_dir/*.exe | |
./build_dir/*.7z | |
./build_dir/*.pdb | |
generate_other_staffs: | |
runs-on: ubuntu-latest | |
outputs: | |
newTag: ${{ steps.getNewTag.outputs.newTag }} | |
releaseTitle: ${{steps.getReleaseTitle.outputs.releaseTitle}} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # need all tags to genearte changelog | |
- name: Get git short SHA | |
id: shortSHA | |
run: | | |
echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT | |
- name: Get changelog tags | |
id: changelogTags | |
run: | | |
if [[ '${{env.prerelease}}' == 'true' ]] | |
then | |
echo "This is a pre-release" | |
previousTag=$(git tag --sort=-creatordate | grep "^v" | sed -n 2p) | |
currentTag=$(git tag --sort=-creatordate | grep "^v" | sed -n 1p) | |
else | |
echo "This is not a pre-release" | |
previousTag=$(git tag --sort=-creatordate | grep "^v" | grep -v "alpha" | sed -n 2p) | |
currentTag=$(git tag --sort=-creatordate | grep "^v" | grep -v "alpha" | sed -n 1p) | |
fi | |
echo "prev_tag=$previousTag" >> $GITHUB_OUTPUT | |
echo "curr_tag=$currentTag" >> $GITHUB_OUTPUT | |
echo "previousTag : $previousTag" | |
echo "currentTag : $currentTag" | |
- name: Get new tag | |
id: getNewTag | |
run: | | |
echo "newTag=v${{ env.version }}-${{ env.versionSuffix }}.${{ steps.shortSHA.outputs.sha_short }}" >> $GITHUB_OUTPUT | |
- name: Build Changelog | |
id: build_changelog | |
uses: mikepenz/release-changelog-builder-action@v3 | |
with: | |
commitMode: false | |
fromTag: ${{ steps.changelogTags.outputs.prev_tag }} | |
toTag: "${{ steps.changelogTags.outputs.curr_tag }}" | |
configurationJson: | | |
{ | |
"template": "#{{CHANGELOG}}\n\n<details>\n<summary>🔴 Uncategorized</summary>\n\n#{{UNCATEGORIZED}}\n</details>", | |
"categories": [ | |
{ | |
"title": "## 🚀 Features", | |
"labels": ["feature","feat","opt"] | |
}, | |
{ | |
"title": "## 🐛 Fixes", | |
"labels": ["fix","bug"] | |
} | |
, | |
{ | |
"title": "## 🤖 DevOps", | |
"labels": ["action",] | |
} | |
, | |
{ | |
"title": "## 🧼 Clean Code", | |
"labels": ["clean","refactor"] | |
} | |
], | |
"label_extractor": [ | |
{ | |
"pattern": "([^:]*):.*", | |
"target": "$1", | |
"on_property": "title", | |
"flags": "gu" | |
} | |
] | |
} | |
- name: Generate changelog.txt | |
run: | | |
touch changelog.txt | |
cat <<HEREDOC > changelog.txt | |
[Install instructions for Windows, macOS and Linux](https://xiaoyifang.github.io/goldendict-ng/install/). | |
Filename pattern: GoldenDict-ng-[version]-[Qt version]-[system name]... | |
For Linux, the released version is on Flathub → [io.github.xiaoyifang.goldendict_ng](https://flathub.org/apps/io.github.xiaoyifang.goldendict_ng). | |
Based on branch: ${{ github.ref_name }} | |
#### Changes | |
${{ steps.build_changelog.outputs.changelog }} | |
HEREDOC | |
- name: Get release title | |
id: getReleaseTitle | |
run: | | |
if [[ '${{ env.prerelease }}' == 'true' ]] | |
then | |
echo "releaseTitle=Daily build ${{ steps.shortSHA.outputs.sha_short }}" >> $GITHUB_OUTPUT | |
else | |
echo "releaseTitle=v${{ env.version }}-${{ env.versionSuffix }}.${{ steps.shortSHA.outputs.sha_short }}" >> $GITHUB_OUTPUT | |
fi | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: changelog.txt | |
if-no-files-found: error | |
retention-days: 7 | |
path: ./changelog.txt | |
publish: | |
needs: [build_macOS, build_Windows, generate_other_staffs] | |
runs-on: ubuntu-24.04 | |
env: | |
newTag: ${{ needs.generate_other_staffs.outputs.newTag }} | |
releaseTitle: ${{ needs.generate_other_staffs.outputs.releaseTitle }} | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
merge-multiple: true | |
- name: Print all files | |
run: ls -R | |
- name: Create new tag | |
run: | | |
if [[ '${{ env.prerelease }}' == 'true' ]] | |
then | |
gh release create '${{ env.newTag }}' \ | |
-t '${{ env.releaseTitle }}' \ | |
--target '${{ github.ref_name }}' \ | |
--notes-file=./changelog.txt \ | |
--latest=false \ | |
--prerelease \ | |
--repo ${GITHUB_REPOSITORY} | |
else | |
gh release create '${{ env.newTag }}' \ | |
-t '${{ env.releaseTitle }}' \ | |
--target '${{ github.ref_name }}' \ | |
--notes-file=./changelog.txt \ | |
--latest=true \ | |
--repo ${GITHUB_REPOSITORY} | |
fi | |
- name: Uploading artifacts | |
run: | | |
gh release upload '${{ env.newTag }}' --repo ${GITHUB_REPOSITORY} --clobber \ | |
*.7z *.exe *.pdb *.dmg |