Skip to content

New properties framework #2423

New properties framework

New properties framework #2423

Workflow file for this run

name: Build Packages
on:
push:
paths-ignore:
- 'docs/**'
- '**.md'
- 'appveyor.yml'
- '.travis.yml'
pull_request:
paths-ignore:
- 'docs/**'
- '**.md'
- 'appveyor.yml'
- '.travis.yml'
env:
QBS_VERSION: 2.4.1
SENTRY_VERSION: 0.7.6
SENTRY_ORG: mapeditor
SENTRY_PROJECT: tiled
TILED_RELEASE: ${{ startsWith(github.ref, 'refs/tags/v') }}
TILED_SNAPSHOT: ${{ !startsWith(github.ref, 'refs/tags/v') }}
jobs:
version:
name: Determine Tiled version
runs-on: ubuntu-latest
outputs:
version: ${{ steps.get-version.outputs.version }}
release: ${{ steps.get-version.outputs.release }}
steps:
- name: Get version
id: get-version
run: |
if [[ "$TILED_RELEASE" == 'true' ]]; then echo "version=${GITHUB_REF:11}" >> $GITHUB_OUTPUT ; fi
if [[ "$TILED_RELEASE" != 'true' ]]; then echo "version=$(date "+%Y.%m.%d")" >> $GITHUB_OUTPUT ; fi
echo "release=${TILED_RELEASE}" >> $GITHUB_OUTPUT
linux:
name: Linux (AppImage, Qt ${{ matrix.qt_version_major }})
runs-on: ubuntu-20.04
needs: version
strategy:
matrix:
include:
- qt_version: 5.15.2
qt_version_major: 5
- qt_version: 6.8.0
qt_version_major: 6
env:
TILED_VERSION: ${{ needs.version.outputs.version }}
QT_VERSION: ${{ matrix.qt_version }}
QTCREATOR_VERSION: 14.0.2
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt update
sudo apt install \
libcurl4-openssl-dev \
libgl1-mesa-dev \
libxcb-cursor0 \
libxcb-icccm4 \
libxcb-image0 \
libxcb-keysyms1 \
libxcb-randr0 \
libxcb-render-util0 \
libxcb-shape0 \
libxcb-xinerama0 \
libxkbcommon-x11-0 \
libzstd-dev
- name: Install Qt
run: |
./dist/install-qt.sh --version ${QT_VERSION} qtbase qtdeclarative qtsvg qtimageformats qttools qttranslations icu | tee -a $GITHUB_PATH
./dist/install-qt.sh --version ${QTCREATOR_VERSION} qtcreator | tee -a $GITHUB_PATH
- name: Setup ccache
uses: hendrikmuhs/ccache-action@v1
with:
max-size: 250M
- name: Setup CMake
uses: jwlawson/actions-setup-cmake@v2
with:
cmake-version: '3.19'
- name: Setup Qbs
run: |
qbs --version
qbs setup-toolchains --detect
qbs config defaultProfile x86_64-linux-gnu-gcc-10
- name: Build Sentry Native
run: |
curl -sLO https://github.com/getsentry/sentry-native/releases/download/${SENTRY_VERSION}/sentry-native.zip
mkdir sentry-native
pushd sentry-native
unzip -q ../sentry-native.zip
cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo -DSENTRY_BACKEND=breakpad
cmake --build build --parallel
sudo cmake --install build --prefix /usr --config RelWithDebInfo
popd
- name: Build Tiled
run: |
qbs install --install-root AppDir config:release qbs.installPrefix:/usr projects.Tiled.sentry:true qbs.debugInformation:true modules.cpp.separateDebugInformation:true modules.cpp.compilerWrapper:ccache
- name: Upload symbols and sources to Sentry
if: github.repository == 'mapeditor/tiled' && github.event_name == 'push'
continue-on-error: ${{ needs.version.outputs.release == 'false' }}
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
run: |
curl -sL https://sentry.io/get-cli/ | bash
sentry-cli debug-files upload --include-sources src AppDir
- name: Build AppImage
run: |
cp LICENSE* COPYING *md AppDir/
wget --no-verbose "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage"
wget --no-verbose "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage"
chmod +x linuxdeploy*.AppImage
export EXTRA_QT_PLUGINS=svg
export LD_LIBRARY_PATH=/opt/Qt/${QT_VERSION}/gcc_64/lib:$PWD/AppDir/usr/lib
export OUTPUT=Tiled-${{ needs.version.outputs.version }}_Linux_Qt-${{ matrix.qt_version_major }}_x86_64.AppImage
# Avoid shipping the debug information
find AppDir -name \*.debug -delete
./linuxdeploy-x86_64.AppImage --appdir AppDir --custom-apprun=dist/linux/AppRun --exclude-library "*libpython3*" --plugin qt
# We don't need the bearer plugins (needed for Qt 5 only)
rm -rfv AppDir/usr/plugins/bearer
./linuxdeploy-x86_64.AppImage --appdir AppDir --custom-apprun=dist/linux/AppRun --exclude-library "*libpython3*" --output appimage
- name: Upload Tiled.AppImage
uses: actions/upload-artifact@v4
with:
name: Tiled-${{ needs.version.outputs.version }}_Linux_Qt-${{ matrix.qt_version_major }}_x86_64.AppImage
path: Tiled-${{ needs.version.outputs.version }}_Linux_Qt-${{ matrix.qt_version_major }}_x86_64.AppImage
snap:
name: Linux (snap)
runs-on: ubuntu-latest
needs: version
env:
TILED_VERSION: ${{ needs.version.outputs.version }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set Tiled version
id: version
run: |
if [[ "$TILED_RELEASE" == 'true' ]]; then echo "snap_channel=candidate" >> $GITHUB_OUTPUT ; fi
if [[ "$TILED_RELEASE" != 'true' ]]; then echo "snap_channel=beta" >> $GITHUB_OUTPUT ; fi
- name: Build snap
id: build
uses: snapcore/action-build@v1
- name: Upload snap artifact
uses: actions/upload-artifact@v4
with:
name: tiled_amd64.snap
path: tiled_*_amd64.snap
- name: Release snap (beta channel)
uses: snapcore/action-publish@master
if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' && (github.ref == 'refs/heads/snapshot' || needs.version.outputs.release == 'true')
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_STORE_LOGIN }}
with:
snap: ${{ steps.build.outputs.snap }}
release: ${{ steps.version.outputs.snap_channel }}
macos:
name: macOS (${{ matrix.version_suffix }})
runs-on: macos-latest
needs: version
strategy:
matrix:
include:
- qt_version: 5.12.12
version_suffix: "10.12-10.15"
architectures: x86_64
- qt_version: 6.8.0
version_suffix: "11+"
architectures: x86_64,arm64
env:
TILED_VERSION: ${{ needs.version.outputs.version }}
QT_VERSION: ${{ matrix.qt_version }}
QTCREATOR_VERSION: 14.0.2
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Qt
run: |
sudo ./dist/install-qt.sh --version ${QT_VERSION} qtbase qtdeclarative qtsvg qtimageformats qttools | tee -a $GITHUB_PATH
sudo ./dist/install-qt.sh --version ${QTCREATOR_VERSION} qtcreator | tee -a $GITHUB_PATH
- name: Setup Qbs
run: |
qbs setup-toolchains --detect
qbs config defaultProfile xcode
- name: Build Zstandard
run: |
git clone --depth 1 -b release https://github.com/facebook/zstd.git
pushd zstd/lib
CFLAGS="-arch arm64 -arch x86_64" make libzstd.a
popd
- name: Build Tiled
run: |
qbs install --install-root install config:release qbs.architectures:${{ matrix.architectures }} qbs.installPrefix:"" projects.Tiled.staticZstd:true
- name: Deploy Qt
run: |
macdeployqt install/Tiled.app -verbose=2
rm -f install/Tiled.app/Contents/PlugIns/tls/libqopensslbackend.dylib
pushd install
ruby ../dist/macos/fixup-install-names.rb
- name: Create Certificate File
id: certificateFile
if: github.repository == 'mapeditor/tiled' && github.event_name == 'push'
uses: timheuer/base64-to-file@v1
with:
fileName: 'certificate.p12'
encodedString: ${{ secrets.MACOS_CERTIFICATE }}
- name: Import Certificate
if: github.repository == 'mapeditor/tiled' && github.event_name == 'push'
run: |
security create-keychain -p ${{ secrets.KEYCHAIN_PWD }} mapeditor/tiled
security default-keychain -s mapeditor/tiled
security unlock-keychain -p ${{ secrets.KEYCHAIN_PWD }} mapeditor/tiled
security -q import ${{ steps.certificateFile.outputs.filePath }} -f pkcs12 -k mapeditor/tiled -P ${{ secrets.MACOS_CERTIFICATE_PWD }} -T /usr/bin/codesign -x
security set-key-partition-list -S 'apple-tool:,apple:' -s -k ${{ secrets.KEYCHAIN_PWD }} mapeditor/tiled
- name: Sign, Notarize & Staple
if: github.repository == 'mapeditor/tiled' && github.event_name == 'push'
run: |
codesign --deep --force --verify --verbose --sign Lindeijer --options runtime install/Tiled.app
ditto -c -k --sequesterRsrc --keepParent install/Tiled.app Tiled_for_notarization.zip
xcrun notarytool submit --apple-id ${{ secrets.NOTARIZATION_USERNAME }} --password ${{ secrets.NOTARIZATION_PASSWORD }} --team-id ${{ secrets.NOTARIZATION_TEAM }} --wait Tiled_for_notarization.zip
xcrun stapler staple install/Tiled.app
- name: Create Archive
run: |
ditto -c -k --sequesterRsrc --keepParent install/Tiled.app Tiled-${{ needs.version.outputs.version }}_macOS-${{ matrix.version_suffix }}.zip
- name: Upload Tiled.app
uses: actions/upload-artifact@v4
with:
name: Tiled-${{ needs.version.outputs.version }}_macOS-${{ matrix.version_suffix }}.app
path: Tiled-${{ needs.version.outputs.version }}_macOS-${{ matrix.version_suffix }}.zip
windows:
name: Windows (${{ matrix.arch }}-bit, Qt ${{ matrix.qt_version_major }})
runs-on: windows-latest
needs: version
strategy:
matrix:
include:
- qt_version: 5.15.2
qt_version_major: 5
qt_toolchain: win32_mingw81
arch: 32
openssl_arch: x86
filename_suffix: 'Windows-7-8_x86'
mingw_version: 8.1.0
mingw_component: mingw
mingw_path: /c/Qt/Tools/mingw810_32/bin
- qt_version: 6.8.0
qt_version_major: 6
qt_toolchain: win64_mingw
arch: 64
openssl_arch: x64
filename_suffix: 'Windows-10+_x86_64'
mingw_version: 13.1.0
mingw_component: mingw1310
mingw_path: /c/Qt/Tools/mingw1310_64/bin
env:
TILED_VERSION: ${{ needs.version.outputs.version }}
MINGW_PATH: ${{ matrix.mingw_path }}
defaults:
run:
shell: bash
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Qt
run: |
echo "QT_PATH=$(./dist/install-qt.sh --version ${{ matrix.qt_version }} --toolchain ${{ matrix.qt_toolchain }} qtbase qtdeclarative qtsvg qtimageformats qttools qttranslations)" >> $GITHUB_ENV
./dist/install-qt.sh --version ${{ matrix.mingw_version }} --toolchain win${{ matrix.arch }}_mingw ${{ matrix.mingw_component }}
- name: Install Qbs
run: |
choco install -y qbs --version ${QBS_VERSION}
- name: Setup Qbs
run: |
qbs setup-toolchains ${MINGW_PATH}/*-w64-mingw32-gcc.exe mingw
qbs setup-qt ${QT_PATH}/qmake.exe qt
qbs config defaultProfile qt
- name: Build Zstandard
run: |
export PATH="${MINGW_PATH}:$PATH"
git clone --depth 1 -b release https://github.com/facebook/zstd.git
pushd zstd/lib
CC=gcc mingw32-make -j2 libzstd.a
popd
- name: Build Tiled
run: |
export TILED_MSI_VERSION=1.4.${GITHUB_RUN_NUMBER}
qbs build config:release projects.Tiled.windowsInstaller:true projects.Tiled.staticZstd:true
mv release/installer*/Tiled-*.msi ./Tiled-${{ needs.version.outputs.version }}_${{ matrix.filename_suffix }}.msi
- name: Upload Tiled installer
uses: actions/upload-artifact@v4
with:
name: Tiled-${{ needs.version.outputs.version }}_${{ matrix.filename_suffix }}.msi
path: Tiled-${{ needs.version.outputs.version }}_*.msi
- name: Upload Tiled archive
uses: actions/upload-artifact@v4
with:
name: Tiled-${{ needs.version.outputs.version }}_${{ matrix.filename_suffix }}.zip
path: release/install-root/*
github:
name: Upload to GitHub releases
runs-on: ubuntu-latest
needs: [version, linux, macos, windows]
permissions:
contents: write
if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' && needs.version.outputs.release == 'true'
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
- name: Create release
id: create_release
uses: softprops/action-gh-release@v2
with:
name: Tiled ${{ needs.version.outputs.version }}
draft: true
prerelease: false
files: |
Tiled-${{ needs.version.outputs.version }}_Windows-10+_x86_64.msi/*.msi
Tiled-${{ needs.version.outputs.version }}_Windows-7-8_x86.msi/*.msi
Tiled-${{ needs.version.outputs.version }}_Linux_Qt-5_x86_64.AppImage/*.AppImage
Tiled-${{ needs.version.outputs.version }}_Linux_Qt-6_x86_64.AppImage/*.AppImage
Tiled-${{ needs.version.outputs.version }}_macOS-10.12-10.15.app/*.zip
Tiled-${{ needs.version.outputs.version }}_macOS-11+.app/*.zip
sentry:
name: Create Sentry release
runs-on: ubuntu-latest
needs: [version, linux, macos, windows]
if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' && needs.version.outputs.release == 'true'
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Create Sentry release
uses: getsentry/action-release@v1
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
with:
environment: releases
version: tiled@${{ needs.version.outputs.version }}