mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-09 15:36:47 -05:00
Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
218fd97a2e | ||
|
|
56b3090924 | ||
|
|
79d87b2b54 | ||
|
|
1ae54cabc0 |
@@ -13,7 +13,7 @@ jobs:
|
||||
runs-on: ubuntu-22.04
|
||||
timeout-minutes: 10
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
- uses: storytold/craft-common-actions/actions/install-apt-packages@main
|
||||
with:
|
||||
packages: rpm jq binutils zsync
|
||||
@@ -34,7 +34,7 @@ jobs:
|
||||
TAURI_FRONTEND_PATH: ${{ github.workspace }}/frontend
|
||||
TAURI_APP_PATH: ${{ github.workspace }}/crates/desktop/artcraft
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
- uses: storytold/craft-common-actions/actions/install-apt-packages@main
|
||||
with:
|
||||
packages: libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libssl-dev libclang-dev libasound2-dev libxdo-dev libdbus-1-dev build-essential clang file jq perl cmake nasm rpm zsync gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-libav
|
||||
@@ -63,7 +63,7 @@ jobs:
|
||||
PKG_CONFIG_LIBDIR_riscv64gc_unknown_linux_gnu=/usr/lib/riscv64-linux-gnu/pkgconfig:/usr/share/pkgconfig
|
||||
ENV
|
||||
echo "CMAKE_TOOLCHAIN_FILE_riscv64gc_unknown_linux_gnu=$GITHUB_WORKSPACE/packaging/linux/riscv64.cmake" >> "$GITHUB_ENV"
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/setup-node@v7
|
||||
with:
|
||||
node-version: '22'
|
||||
cache: npm
|
||||
@@ -89,7 +89,7 @@ jobs:
|
||||
ARCH: ${{ matrix.arch }}
|
||||
TARGET: ${{ matrix.target }}
|
||||
run: packaging/linux/package.sh "$ARCH" "$TARGET"
|
||||
- uses: actions/upload-artifact@v4
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: release-linux-${{ matrix.arch }}
|
||||
path: dist/release/*
|
||||
@@ -102,8 +102,8 @@ jobs:
|
||||
matrix:
|
||||
arch: [x86_64, aarch64]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/download-artifact@v4
|
||||
- uses: actions/checkout@v7
|
||||
- uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: release-linux-${{ matrix.arch }}
|
||||
path: dist/linux
|
||||
@@ -126,7 +126,7 @@ jobs:
|
||||
for package in dist/release/*.pkg.tar.zst; do
|
||||
tar --zstd -xOf "$package" .PKGINFO | grep -Fx 'depend = webkit2gtk-4.1'
|
||||
done
|
||||
- uses: actions/upload-artifact@v4
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: release-arch-${{ matrix.arch }}
|
||||
path: dist/release/*.pkg.tar.zst
|
||||
@@ -145,8 +145,8 @@ jobs:
|
||||
- {arch: x86_64, runner: ubuntu-24.04}
|
||||
- {arch: aarch64, runner: ubuntu-24.04-arm}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/download-artifact@v4
|
||||
- uses: actions/checkout@v7
|
||||
- uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: release-linux-${{ matrix.arch }}
|
||||
path: dist/linux
|
||||
@@ -161,8 +161,10 @@ jobs:
|
||||
- name: Build Flatpak and publish OCI
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
run: packaging/linux/flatpak.sh
|
||||
- uses: actions/upload-artifact@v4
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: release-flatpak-${{ matrix.arch }}
|
||||
path: |
|
||||
@@ -175,7 +177,7 @@ jobs:
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
- name: Read version
|
||||
id: version
|
||||
run: echo "value=$(jq -r .version crates/desktop/artcraft/tauri.conf.json)" >> "$GITHUB_OUTPUT"
|
||||
@@ -189,6 +191,5 @@ jobs:
|
||||
app-title: ArtCraft
|
||||
tag-prefix: artcraft-v
|
||||
retain: "true"
|
||||
allow-published: "true"
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
signing-key: ${{ secrets.LINUX_SIGNING_KEY }}
|
||||
|
||||
@@ -29,10 +29,10 @@ jobs:
|
||||
|
||||
runs-on: ${{ matrix.platform }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
|
||||
- name: setup node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v7
|
||||
with:
|
||||
node-version: lts/*
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ jobs:
|
||||
|
||||
runs-on: ${{ matrix.platform }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
|
||||
- name: install Rust stable
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
@@ -39,7 +39,7 @@ jobs:
|
||||
shell: cmd
|
||||
|
||||
- name: setup node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v7
|
||||
with:
|
||||
node-version: lts/*
|
||||
|
||||
|
||||
@@ -21,9 +21,4 @@ jobs:
|
||||
freebsd:
|
||||
# Intentionally tracked at @main (not SHA-pinned) so org-wide CI improvements, security fixes, and build optimizations propagate without PR churn across all craftapp repos.
|
||||
uses: storytold/craft-common-actions/.github/workflows/freebsd.yml@main
|
||||
with:
|
||||
architectures: '["x86_64"]'
|
||||
craft-fonts-ref: ""
|
||||
cargo-build-extra-args: "--exclude artcraft --exclude artcraft_native --exclude tauri-plugin-http"
|
||||
cargo-test-extra-args: "--exclude artcraft --exclude artcraft_native --exclude tauri-plugin-http"
|
||||
|
||||
|
||||
Generated
+54
@@ -553,6 +553,28 @@ version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
|
||||
|
||||
[[package]]
|
||||
name = "ashpd"
|
||||
version = "0.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2f3f79755c74fd155000314eb349864caa787c6592eace6c6882dad873d9c39"
|
||||
dependencies = [
|
||||
"async-fs",
|
||||
"async-net",
|
||||
"enumflags2",
|
||||
"futures-channel",
|
||||
"futures-util",
|
||||
"rand 0.9.2",
|
||||
"raw-window-handle",
|
||||
"serde",
|
||||
"serde_repr",
|
||||
"url",
|
||||
"wayland-backend",
|
||||
"wayland-client",
|
||||
"wayland-protocols",
|
||||
"zbus",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "assertor"
|
||||
version = "0.0.3"
|
||||
@@ -616,6 +638,17 @@ dependencies = [
|
||||
"slab",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-fs"
|
||||
version = "2.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8034a681df4aed8b8edbd7fbe472401ecf009251c8b40556b304567052e294c5"
|
||||
dependencies = [
|
||||
"async-lock",
|
||||
"blocking",
|
||||
"futures-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-io"
|
||||
version = "2.6.0"
|
||||
@@ -645,6 +678,17 @@ dependencies = [
|
||||
"pin-project-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-net"
|
||||
version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7"
|
||||
dependencies = [
|
||||
"async-io",
|
||||
"blocking",
|
||||
"futures-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-process"
|
||||
version = "2.5.0"
|
||||
@@ -6228,6 +6272,12 @@ dependencies = [
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pollster"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3"
|
||||
|
||||
[[package]]
|
||||
name = "polycool"
|
||||
version = "0.4.0"
|
||||
@@ -6938,6 +6988,7 @@ version = "0.16.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a15ad77d9e70a92437d8f74c35d99b4e4691128df018833e99f90bcd36152672"
|
||||
dependencies = [
|
||||
"ashpd",
|
||||
"block2 0.6.2",
|
||||
"dispatch2",
|
||||
"glib-sys",
|
||||
@@ -6949,7 +7000,9 @@ dependencies = [
|
||||
"objc2-app-kit 0.3.2",
|
||||
"objc2-core-foundation",
|
||||
"objc2-foundation 0.3.2",
|
||||
"pollster",
|
||||
"raw-window-handle",
|
||||
"urlencoding",
|
||||
"wasm-bindgen",
|
||||
"wasm-bindgen-futures",
|
||||
"web-sys",
|
||||
@@ -11956,6 +12009,7 @@ dependencies = [
|
||||
"endi",
|
||||
"enumflags2",
|
||||
"serde",
|
||||
"url",
|
||||
"winnow 1.0.0",
|
||||
"zcheapstr",
|
||||
"zvariant_derive",
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
<p align="center">
|
||||
<a href="https://sonarcloud.io/project/overview?id=storytold_artcraft"><img alt="Scanned by SonarCloud" src="https://img.shields.io/badge/Scanned_by-SonarCloud-4b9fd5?style=flat-square&logo=sonarqubecloud&logoColor=white"></a>
|
||||
<a href="https://coderabbit.ai"><img alt="Reviewed by CodeRabbit" src="https://img.shields.io/coderabbit/prs/github/storytold/artcraft?style=flat-square&label=Reviewed%20by%20CodeRabbit&logo=coderabbit"></a>
|
||||
</p>
|
||||
<p align="center"><strong>The IDE for artists.</strong></p>
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
/// The version of the ArtCraft desktop app reported in the UI and via Analytics.
|
||||
/// This should match the CI builds.
|
||||
pub const ARTCRAFT_VERSION: &str = "0.41.1";
|
||||
pub const ARTCRAFT_VERSION: &str = "0.42.0";
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://schema.tauri.app/config/2.0.0-rc",
|
||||
"productName": "ArtCraft",
|
||||
"version": "0.41.1",
|
||||
"version": "0.42.0",
|
||||
"identifier": "ai.artcraft.app",
|
||||
"build": {
|
||||
"frontendDist": "../../../frontend/apps/artcraft/dist",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://schema.tauri.app/config/2.0.0-rc",
|
||||
"productName": "ArtCraft",
|
||||
"version": "0.41.1",
|
||||
"version": "0.42.0",
|
||||
"identifier": "ai.artcraft.app",
|
||||
"build": {
|
||||
"frontendDist": "../../../frontend/apps/artcraft/dist",
|
||||
|
||||
@@ -13,9 +13,10 @@ existing `artcraft-v<version>` draft, retaining Windows and macOS assets. The ve
|
||||
Native AppImages also include zsync delta-update metadata.
|
||||
|
||||
Flatpak uses native Ubuntu 24.04 runners and GNOME 51 for GTK3/WebKitGTK 4.1. Its build checks
|
||||
for missing ELF dependencies inside the sandbox. RISC-V packages require Ubuntu 24.04-era
|
||||
libraries; x86_64 and ARM64 use Ubuntu 22.04 as their build baseline. The suite does not publish
|
||||
RISC-V AppImages, Arch packages or Flatpaks.
|
||||
for missing ELF dependencies inside the sandbox, grants `--persist=Artcraft` so settings and task
|
||||
data survive restarts, and provides a launcher wrapper keeping WebKitGTK's accelerated rendering
|
||||
path enabled. RISC-V packages require Ubuntu 24.04-era libraries; x86_64 and ARM64 use Ubuntu 22.04
|
||||
as their build baseline. The suite does not publish RISC-V AppImages, Arch packages or Flatpaks.
|
||||
|
||||
`package.sh <architecture> <rust-target>` normalizes Tauri's DEB/RPM/AppImage filenames and
|
||||
extracts the DEB's `/usr` tree into the suite's `bin/` and `share/` tarball layout. Shared Craft
|
||||
|
||||
@@ -2,13 +2,50 @@
|
||||
<component type="desktop-application">
|
||||
<id>ai.artcraft.app</id>
|
||||
<name>ArtCraft Studio</name>
|
||||
<summary>Create AI images and video</summary>
|
||||
<summary>Create images and video with AI</summary>
|
||||
<metadata_license>MIT</metadata_license>
|
||||
<project_license>MIT OR Apache-2.0</project_license>
|
||||
<description><p>ArtCraft Studio is a desktop workspace for generating AI images and video with connected AI providers.</p></description>
|
||||
<launchable type="desktop-id">ai.artcraft.app.desktop</launchable>
|
||||
<developer id="ai.artcraft">
|
||||
<name>ArtCraft</name>
|
||||
</developer>
|
||||
<url type="homepage">https://getartcraft.com</url>
|
||||
<developer id="ai.artcraft"><name>ArtCraft</name></developer>
|
||||
<categories><category>Graphics</category><category>AudioVideo</category></categories>
|
||||
<provides><binary>artcraft</binary></provides>
|
||||
<url type="bugtracker">https://github.com/storytold/artcraft/issues</url>
|
||||
<url type="vcs-browser">https://github.com/storytold/artcraft</url>
|
||||
<url type="contact">https://discord.gg/artcraft</url>
|
||||
<description>
|
||||
<p>ArtCraft Studio is a creative desktop workspace for generating AI images and video with connected AI providers.</p>
|
||||
<ul>
|
||||
<li>Text-to-image and image-to-image creation with state-of-the-art models</li>
|
||||
<li>Video generation and camera motion controls</li>
|
||||
<li>Direct integration with Fal, Grok, Midjourney, Sora, and WorldLabs</li>
|
||||
<li>Local task persistence with an embedded SQLite queue</li>
|
||||
</ul>
|
||||
</description>
|
||||
<launchable type="desktop-id">ai.artcraft.app.desktop</launchable>
|
||||
<categories>
|
||||
<category>Graphics</category>
|
||||
<category>AudioVideo</category>
|
||||
</categories>
|
||||
<keywords>
|
||||
<keyword>ai</keyword>
|
||||
<keyword>image</keyword>
|
||||
<keyword>video</keyword>
|
||||
<keyword>generation</keyword>
|
||||
<keyword>art</keyword>
|
||||
</keywords>
|
||||
<branding>
|
||||
<color type="primary" scheme_preference="light">#2f7bf5</color>
|
||||
<color type="primary" scheme_preference="dark">#1a5bc4</color>
|
||||
</branding>
|
||||
<requires>
|
||||
<display_length compare="ge">760</display_length>
|
||||
</requires>
|
||||
<supports>
|
||||
<control>keyboard</control>
|
||||
<control>pointing</control>
|
||||
</supports>
|
||||
<content_rating type="oars-1.1" />
|
||||
<provides>
|
||||
<binary>artcraft</binary>
|
||||
</provides>
|
||||
</component>
|
||||
|
||||
Executable
+16
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
# ArtCraft Studio is a Tauri (WebKitGTK) desktop app.
|
||||
#
|
||||
# Keep WebKitGTK's accelerated path on, the opposite of the older recipe of
|
||||
# disabling the DMABUF renderer. On org.gnome.Platform//51 the unaccelerated
|
||||
# path draws this window wrong.
|
||||
#
|
||||
# ${VAR:-0} rather than plain assignment, so a user whose driver does need the
|
||||
# unaccelerated path can take it back:
|
||||
# flatpak override --user --env=WEBKIT_DISABLE_DMABUF_RENDERER=1 ai.artcraft.app
|
||||
export WEBKIT_DISABLE_DMABUF_RENDERER="${WEBKIT_DISABLE_DMABUF_RENDERER:-0}"
|
||||
export WEBKIT_DISABLE_COMPOSITING_MODE="${WEBKIT_DISABLE_COMPOSITING_MODE:-0}"
|
||||
|
||||
exec /app/bin/artcraft.real "$@"
|
||||
@@ -8,6 +8,7 @@ trap 'rm -rf "$work"' EXIT
|
||||
mkdir -p "$work/stage" dist/release
|
||||
tar -xzf "dist/linux/$base.tar.gz" --strip-components=1 -C "$work/stage"
|
||||
cp packaging/linux/flatpak.yml "$work/manifest.yml"
|
||||
cp packaging/linux/artcraft-wrapper "$work/artcraft-wrapper"
|
||||
flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||
sign=()
|
||||
keys=()
|
||||
@@ -21,7 +22,7 @@ flatpak-builder --user --install-deps-from=flathub --disable-rofiles-fuse --forc
|
||||
# Fail on missing WebKitGTK or other runtime libraries rather than shipping an unloadable binary.
|
||||
# shellcheck disable=SC2016 # Expand these variables inside the Flatpak runtime shell.
|
||||
flatpak build --runtime "$work/build" sh -c '
|
||||
dependencies=$(ldd /app/bin/artcraft) || exit 1
|
||||
dependencies=$(ldd /app/bin/artcraft.real) || exit 1
|
||||
printf "%s\n" "$dependencies"
|
||||
case "$dependencies" in *"not found"*) exit 1 ;; esac
|
||||
'
|
||||
@@ -37,4 +38,13 @@ if [[ -n "${SIGNING_FPR:-}" ]]; then
|
||||
skopeo copy --format oci --dest-creds "$creds" "oci:dist/release/$base-oci" "docker://$registry:stable-$arch"
|
||||
fi
|
||||
skopeo inspect --raw --creds "$creds" "docker://$registry:$version-$arch" >"dist/release/$base.oci-manifest.json"
|
||||
|
||||
if [[ -n "${DOCKERHUB_USERNAME:-}" && -n "${DOCKERHUB_TOKEN:-}" ]]; then
|
||||
dh_registry="docker.io/storytold/${GITHUB_REPOSITORY##*/}"
|
||||
dh_creds="$DOCKERHUB_USERNAME:$DOCKERHUB_TOKEN"
|
||||
skopeo copy --format oci --dest-creds "$dh_creds" "oci:dist/release/$base-oci" "docker://$dh_registry:$version-$arch"
|
||||
if [[ "$version" != *-* && ( "$GITHUB_REF" == refs/heads/release || "$GITHUB_REF" == refs/heads/artcraft-release ) ]]; then
|
||||
skopeo copy --format oci --dest-creds "$dh_creds" "oci:dist/release/$base-oci" "docker://$dh_registry:stable-$arch"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -13,6 +13,9 @@ finish-args:
|
||||
- --filesystem=xdg-pictures
|
||||
- --filesystem=xdg-videos
|
||||
- --filesystem=xdg-download
|
||||
# The app hardcodes its data to ~/Artcraft (settings, credentials, state).
|
||||
# Persist it under ~/.var/app/ai.artcraft.app/Artcraft so data survives exits.
|
||||
- --persist=Artcraft
|
||||
modules:
|
||||
- name: artcraft
|
||||
buildsystem: simple
|
||||
@@ -20,6 +23,10 @@ modules:
|
||||
- cp -a . /app/
|
||||
- install -Dm644 /app/share/icons/hicolor/128x128/apps/artcraft.png /app/share/icons/hicolor/128x128/apps/ai.artcraft.app.png
|
||||
- sed -i 's/^Icon=.*/Icon=ai.artcraft.app/' /app/share/applications/ai.artcraft.app.desktop
|
||||
- mv /app/bin/artcraft /app/bin/artcraft.real
|
||||
- install -Dm755 artcraft-wrapper /app/bin/artcraft
|
||||
sources:
|
||||
- type: dir
|
||||
path: stage
|
||||
- type: file
|
||||
path: artcraft-wrapper
|
||||
|
||||
Reference in New Issue
Block a user