Skip to content

CI: build snap without snapcore/action-build#4527

Merged
bjorn merged 2 commits into
masterfrom
inline-snap-build
May 23, 2026
Merged

CI: build snap without snapcore/action-build#4527
bjorn merged 2 commits into
masterfrom
inline-snap-build

Conversation

@bjorn
Copy link
Copy Markdown
Member

@bjorn bjorn commented May 22, 2026

Summary

snapcore/action-build appears effectively unmaintained: snapcore/action-build#1 (updating the action's Node.js runtime to node24) has been open since April with no maintainer response. As GitHub's node20 deprecation rolls in, this action becomes a liability.

Replace it with two inline steps:

  1. sudo snap install --classic snapcraft
  2. sudo snapcraft --destructive-mode, with the same SNAPCRAFT_BUILD_INFO and SNAPCRAFT_IMAGE_INFO env vars the action used to set.

--destructive-mode builds directly on the runner (no LXD), which is faster and simpler. The job is pinned to ubuntu-24.04 so the host always matches the snap's base: core24.

Test plan

  • CI runs the Linux (snap) job and produces tiled_*_amd64.snap
  • Resulting snap contains snap/manifest.yaml (from SNAPCRAFT_BUILD_INFO=1)

bjorn added 2 commits May 23, 2026 01:40
The action is effectively unmaintained (snapcore/action-build#1 has
been open since April with no maintainer response). Replace it with a
direct snapcraft invocation using --destructive-mode, which builds on
the runner host instead of in LXD. Pin the job to ubuntu-24.04 so the
host matches the snap's core24 base.
This step set a snap_channel output that's not consumed anywhere; the
last consumer was removed in d3530f4 when snap releases stopped
happening from GitHub Actions.
@bjorn bjorn merged commit f4fcfcf into master May 23, 2026
12 of 16 checks passed
@bjorn bjorn deleted the inline-snap-build branch May 23, 2026 00:00
bjorn added a commit that referenced this pull request May 27, 2026
Replaced with a direct snapcraft invocation using --destructive-mode,
which builds on the runner host instead of in LXD. Pin the job to
ubuntu-24.04 so the host matches the snap's core24 base.

Also dropped the dead snap_channel step, since we're not publishing
the snap anymore since d3530f4.

(cherry picked from commit f4fcfcf)
UltraDagon pushed a commit to UltraDagon/tiled that referenced this pull request May 29, 2026
Replaced with a direct snapcraft invocation using --destructive-mode,
which builds on the runner host instead of in LXD. Pin the job to
ubuntu-24.04 so the host matches the snap's core24 base.

Also dropped the dead snap_channel step, since we're not publishing
the snap anymore since d3530f4.
UltraDagon added a commit to UltraDagon/tiled that referenced this pull request May 29, 2026
border and grid over mapitem.)

removed unneeded qt.quick dependency from libtiledquick.qbs; Fixed color property not updating border color

Fixed bug mentioned by KodyAI: border would not update upon map resizes or color updates

Created skeleton for MapGridItem class

somewhat working grid, terribly unoptimized; looking into using a transform node or preferably shader to make it better

Finished grid shader; updated border & grid formatting

Added qtshadertools to the included qt_modeules in package.yml; added version check to tiledquick's condition to avoid crash when compiling with older qt versions

added qtshadertools to appveyor's QT_MODULES

Fixed small formatting issues and cleaned up debug code

Some tweaks

- Grid in between tiles
- Fix file list order
- Remove fileTags & overrideTags, relying on defaults

restored old appveyor.yml formatting

changed mapgriditem to use mapitem's map's tilesize for grid size calculation instead of ScreenToTileCoords

Added headers, some tweaks, fixed setScale signal

* Added copyright headers attributing UltraDagon
* Set flags in one call
* Fixed emit from MapGridItem::setScale

Fix setting DirtyMaterial flag in MapBorderItem

Set both flags at once in MapGridMaterial

implemented requested changes

Added missing copyright headers

tBIN plugin: Made it compile with QT_NO_CAST_FROM_ASCII (mapeditor#4513)

Fixes build errors against Qt 6.4 (Ubuntu 24.04) where QStringView
comparisons with const char* literals cause compilation issues.

Wrapped string literals in QLatin1String/QStringLiteral and replaced
implicit const char* conversions with explicit QString::fromStdString /
QLatin1Char.

Fix copy/paste of list properties (mapeditor#4514) and clean up RecursiveBehavior (mapeditor#4517)

Fix copy/paste of list properties and related clean-up

Copying a list custom property and pasting it onto another object
dropped the items, leaving them saved as `type="std::nullptr_t"` in TMX.
The same bug applied to lists nested inside class properties and also
affected storing list properties on projects or worlds.

The clipboard, project files, and world files serialize through
`propertiesToJson` / `propertiesFromJson`, which fed
`QJsonValue::fromVariant` a tree containing `ExportValue` wrappers it
was not programmed to handle. They now use a new `TypedListValues`
`RecursiveBehavior` that produces `{type, propertytype, value}` maps for
each list element (matching the JSON map format on disk) and decodes the
same shape on read.

A few cleanups while in the area:

- Folded the JSON map converter helpers (`exportValuesToVariantMap`,
  `convertListValues`) into `ExportContext` so the same recursion logic
  is shared.

- Replaced the half-baked `ListsAsExportValues` default with an explicit
  `NoRecursion` default. Callers that walk compound values themselves
  (the XML reader and writer, `PropertyTypes::toJson`) now use the
  default. The JSON helpers opt in to `TypedListValues`.

- Made the XML writer mirror the XML reader, driving recursion through
  lists and class members itself, so `ExportValuesOnly` was no longer
  needed and was removed.

- Added autotests for round-tripping list values to XML and JSON.

Closes mapeditor#4514

Updated dependencies mentioned in the README.md (mapeditor#4470)

* Minimum version updated to Qt 5.15.2
* Ubuntu/Debian packages updated to Qt 6
* Arch Linux packages update to Qt 6
* Homebrew packages extended with qttools, necessary for lrelease

Fixed resolving of class members values in lists (mapeditor#4525)

The ExportHelper forgot to recurse into list values.

Also documented exportValueToJson's NoRecursion precondition
and tweaked some comments in MapToVariantConverter.

CI: build snap without snapcore/action-build (mapeditor#4527)

Replaced with a direct snapcraft invocation using --destructive-mode,
which builds on the runner host instead of in LXD. Pin the job to
ubuntu-24.04 so the host matches the snap's core24 base.

Also dropped the dead snap_channel step, since we're not publishing
the snap anymore since d3530f4.
UltraDagon added a commit to UltraDagon/tiled that referenced this pull request May 30, 2026
removed unneeded qt.quick dependency from libtiledquick.qbs; Fixed color property not updating border color

Fixed bug mentioned by KodyAI: border would not update upon map resizes or color updates

Created skeleton for MapGridItem class

somewhat working grid, terribly unoptimized; looking into using a transform node or preferably shader to make it better

Finished grid shader; updated border & grid formatting

Added qtshadertools to the included qt_modeules in package.yml; added version check to tiledquick's condition to avoid crash when compiling with older qt versions

added qtshadertools to appveyor's QT_MODULES

Fixed small formatting issues and cleaned up debug code

Some tweaks

- Grid in between tiles
- Fix file list order
- Remove fileTags & overrideTags, relying on defaults

restored old appveyor.yml formatting

changed mapgriditem to use mapitem's map's tilesize for grid size calculation instead of ScreenToTileCoords

Added headers, some tweaks, fixed setScale signal

* Added copyright headers attributing UltraDagon
* Set flags in one call
* Fixed emit from MapGridItem::setScale

Fix setting DirtyMaterial flag in MapBorderItem

Set both flags at once in MapGridMaterial

implemented requested changes

Added missing copyright headers

tBIN plugin: Made it compile with QT_NO_CAST_FROM_ASCII (mapeditor#4513)

Fixes build errors against Qt 6.4 (Ubuntu 24.04) where QStringView
comparisons with const char* literals cause compilation issues.

Wrapped string literals in QLatin1String/QStringLiteral and replaced
implicit const char* conversions with explicit QString::fromStdString /
QLatin1Char.

Fix copy/paste of list properties (mapeditor#4514) and clean up RecursiveBehavior (mapeditor#4517)

Fix copy/paste of list properties and related clean-up

Copying a list custom property and pasting it onto another object
dropped the items, leaving them saved as `type="std::nullptr_t"` in TMX.
The same bug applied to lists nested inside class properties and also
affected storing list properties on projects or worlds.

The clipboard, project files, and world files serialize through
`propertiesToJson` / `propertiesFromJson`, which fed
`QJsonValue::fromVariant` a tree containing `ExportValue` wrappers it
was not programmed to handle. They now use a new `TypedListValues`
`RecursiveBehavior` that produces `{type, propertytype, value}` maps for
each list element (matching the JSON map format on disk) and decodes the
same shape on read.

A few cleanups while in the area:

- Folded the JSON map converter helpers (`exportValuesToVariantMap`,
  `convertListValues`) into `ExportContext` so the same recursion logic
  is shared.

- Replaced the half-baked `ListsAsExportValues` default with an explicit
  `NoRecursion` default. Callers that walk compound values themselves
  (the XML reader and writer, `PropertyTypes::toJson`) now use the
  default. The JSON helpers opt in to `TypedListValues`.

- Made the XML writer mirror the XML reader, driving recursion through
  lists and class members itself, so `ExportValuesOnly` was no longer
  needed and was removed.

- Added autotests for round-tripping list values to XML and JSON.

Closes mapeditor#4514

Updated dependencies mentioned in the README.md (mapeditor#4470)

* Minimum version updated to Qt 5.15.2
* Ubuntu/Debian packages updated to Qt 6
* Arch Linux packages update to Qt 6
* Homebrew packages extended with qttools, necessary for lrelease

Fixed resolving of class members values in lists (mapeditor#4525)

The ExportHelper forgot to recurse into list values.

Also documented exportValueToJson's NoRecursion precondition
and tweaked some comments in MapToVariantConverter.

TiledQuick: Add border and grid to the map view (mapeditor#4392)

Adds qtshadertools dependency.

Co-authored-by: Thorbjørn Lindeijer <bjorn@lindeijer.nl>

CI: build snap without snapcore/action-build (mapeditor#4527)

Replaced with a direct snapcraft invocation using --destructive-mode,
which builds on the runner host instead of in LXD. Pin the job to
ubuntu-24.04 so the host matches the snap's core24 base.

Also dropped the dead snap_channel step, since we're not publishing
the snap anymore since d3530f4.
UltraDagon pushed a commit to UltraDagon/tiled that referenced this pull request May 30, 2026
author Thorbjørn Lindeijer <bjorn@lindeijer.nl> 1774453160 +0100
committer UltraDagon <43974011+UltraDagon@users.noreply.github.com> 1780111770 -0500

parent 7227300
author Thorbjørn Lindeijer <bjorn@lindeijer.nl> 1774453160 +0100
committer UltraDagon <43974011+UltraDagon@users.noreply.github.com> 1780111753 -0500

Fix ability to change properties after deselecting current object (mapeditor#4440)

When deselecting the current object, its properties generally remain
visible in the Properties view. But when changing any of the properties,
the changes were only applied to "selected objects".

Now, when there is still a MapObject set as the current object, changing
its properties will apply to it regardless of whether it is still
selected.

(cherry picked from commit db0d1c4)

Bump softprops/action-gh-release from 2 to 3 (mapeditor#4500)

Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2 to 3.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](softprops/action-gh-release@v2...v3)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
(cherry picked from commit fa62547)

docs: Add pixi-tiledmap support details to documentation (mapeditor#4499)

Added information about pixi-tiledmap as a loader and renderer for Tiled Maps in Pixi.JS.

(cherry picked from commit 1fb0747)

Fix point object bounding box in multi-object selections (mapeditor#4401)

The objectBounds() function was using renderer->shape(object) for Point
objects, which returns the visual pin shape rather than the actual point
position. This caused the selection bounding box to be larger than
expected, affecting snapping and rotation behavior.

Fix by returning a zero-size rect at the point's screen position,
consistent with how Point objects are treated geometrically.

Fixes mapeditor#3784

(cherry picked from commit 7144155)

Added whitespace trimming for custom property names (mapeditor#4486)

This also prevents whitespaces-only property names.

Co-authored-by: Thorbjørn Lindeijer <bjorn@lindeijer.nl>

(cherry picked from commit 725993a)

fix(ci): replace third-party action with native brew bump-cask-pr command (mapeditor#4478)

The `eugenesvk/action-homebrew-bump-cask` action had failed on the first test, see:
mapeditor#4391 (comment)

(cherry picked from commit e48776a)

Made indexes in the TilesetModel without tiles invalid (mapeditor#4512)

This way, those indexes can't be navigated to using the keyboard nor
selected using the mouse.

I've also added rendering of the focused tile in TileDelegate, which
helps a little bit to give additional context in some cases like
multi-selection or when toggling selection.

Closes mapeditor#3498

(cherry picked from commit 77fc9a2)

Bump timheuer/base64-to-file from 1 to 2 (mapeditor#4516)

Bumps [timheuer/base64-to-file](https://github.com/timheuer/base64-to-file) from 1 to 2.
- [Release notes](https://github.com/timheuer/base64-to-file/releases)
- [Commits](timheuer/base64-to-file@v1...v2)

---
updated-dependencies:
- dependency-name: timheuer/base64-to-file
  dependency-version: '2'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
(cherry picked from commit f511930)

tBIN plugin: Made it compile with QT_NO_CAST_FROM_ASCII (mapeditor#4513)

Fixes build errors against Qt 6.4 (Ubuntu 24.04) where QStringView
comparisons with const char* literals cause compilation issues.

Wrapped string literals in QLatin1String/QStringLiteral and replaced
implicit const char* conversions with explicit QString::fromStdString /
QLatin1Char.

(cherry picked from commit d6417e4)

Fix copy/paste of list properties (mapeditor#4514) and clean up RecursiveBehavior (mapeditor#4517)

Fix copy/paste of list properties and related clean-up

Copying a list custom property and pasting it onto another object
dropped the items, leaving them saved as `type="std::nullptr_t"` in TMX.
The same bug applied to lists nested inside class properties and also
affected storing list properties on projects or worlds.

The clipboard, project files, and world files serialize through
`propertiesToJson` / `propertiesFromJson`, which fed
`QJsonValue::fromVariant` a tree containing `ExportValue` wrappers it
was not programmed to handle. They now use a new `TypedListValues`
`RecursiveBehavior` that produces `{type, propertytype, value}` maps for
each list element (matching the JSON map format on disk) and decodes the
same shape on read.

A few cleanups while in the area:

- Folded the JSON map converter helpers (`exportValuesToVariantMap`,
  `convertListValues`) into `ExportContext` so the same recursion logic
  is shared.

- Replaced the half-baked `ListsAsExportValues` default with an explicit
  `NoRecursion` default. Callers that walk compound values themselves
  (the XML reader and writer, `PropertyTypes::toJson`) now use the
  default. The JSON helpers opt in to `TypedListValues`.

- Made the XML writer mirror the XML reader, driving recursion through
  lists and class members itself, so `ExportValuesOnly` was no longer
  needed and was removed.

- Added autotests for round-tripping list values to XML and JSON.

Closes mapeditor#4514

(cherry picked from commit c9ad67b)

Updated dependencies mentioned in the README.md (mapeditor#4470)

* Minimum version updated to Qt 5.15.2
* Ubuntu/Debian packages updated to Qt 6
* Arch Linux packages update to Qt 6
* Homebrew packages extended with qttools, necessary for lrelease

(cherry picked from commit 7f243af)

Fixed resolving of class members values in lists (mapeditor#4525)

The ExportHelper forgot to recurse into list values.

Also documented exportValueToJson's NoRecursion precondition
and tweaked some comments in MapToVariantConverter.

(cherry picked from commit c676301)

CI: build snap without snapcore/action-build (mapeditor#4527)

Replaced with a direct snapcraft invocation using --destructive-mode,
which builds on the runner host instead of in LXD. Pin the job to
ubuntu-24.04 so the host matches the snap's core24 base.

Also dropped the dead snap_channel step, since we're not publishing
the snap anymore since d3530f4.

(cherry picked from commit f4fcfcf)

Prepare for Tiled 1.12.2 release

CI: Corrected macOS version suffixes in artifact names

The Qt 6.10.2 build's deployment target is macOS 13, but the artifact
was named "macOS-11+". The Qt 5.15.2 build covers macOS 10.13 through
12, but the artifact was named "macOS-10.13-10.15". Updated both
version_suffix values to match the actual minimum supported version,
matching the manual rename done for 1.12.1.

CI: Build snap for both amd64 and arm64 (mapeditor#4532)

CI: Disabled Homebrew cask bump workflow (mapeditor#4533)

Homebrew's BrewTestBot autobumps the tiled cask on a ~3-hour
cadence, and brew bump-cask-pr refuses to run manually against
autobumped casks. Set the job's if: to false; flip it back when
BrewTestBot needs replacing.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant