From 37fae64744d10a16408ba34256326770c0045f6d Mon Sep 17 00:00:00 2001 From: Timon Schelling Date: Fri, 3 Oct 2025 13:07:48 +0000 Subject: [PATCH 1/2] provide shaders via artifact repo prototype --- .github/workflows/provide-shaders.yml | 29 ++++++ .../workflows/scripts/artifact-upload.bash | 89 +++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 .github/workflows/provide-shaders.yml create mode 100644 .github/workflows/scripts/artifact-upload.bash diff --git a/.github/workflows/provide-shaders.yml b/.github/workflows/provide-shaders.yml new file mode 100644 index 0000000000..e900890c52 --- /dev/null +++ b/.github/workflows/provide-shaders.yml @@ -0,0 +1,29 @@ +name: Build and upload shaders for graphene raster nodes to artifacts Repository + +on: + push: + pull_request: + +jobs: + check: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + - uses: DeterminateSystems/nix-installer-action@main + - uses: DeterminateSystems/magic-nix-cache-action@main + + - name: Build graphene raster nodes shaders + run: nix develop .nix -c cargo build -r -p graphene-raster-nodes-shaders + + - name: Upload graphene raster nodes shaders to artifacts repository + run: | + bash .github/workflows/scripts/artifact-upload.bash \ + ${{ vars.ARTIFACTS_REPO_OWNER }} \ + ${{ vars.ARTIFACTS_REPO_NAME }} \ + ${{ vars.ARTIFACTS_REPO_BRANCH }} \ + rev/${{ github.sha }}/graphene_raster_nodes_shaders_entrypoint.wgsl \ + target/spirv-builder/spirv-unknown-naga-wgsl/release/deps/graphene_raster_nodes_shaders_entrypoint.wgsl \ + "${{ github.sha }} graphene_raster_nodes_shaders_entrypoint.wgsl" \ + ${{ secrets.ARTIFACTS_REPO_TOKEN }} diff --git a/.github/workflows/scripts/artifact-upload.bash b/.github/workflows/scripts/artifact-upload.bash new file mode 100644 index 0000000000..fdef123bd3 --- /dev/null +++ b/.github/workflows/scripts/artifact-upload.bash @@ -0,0 +1,89 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + cat < + +Arguments: + owner : GitHub user or organization of the target repo + repo : Target repo name + branch : Branch name (e.g. main) + target-path : Full path (including folders + filename) in the target repo where to upload + artifact-file : Local file path to upload + commit-message : Commit message for creating/updating the file + github-token : GitHub token (PAT or equivalent) with write access to the target repo + +This will perform a GitHub API PUT to /repos/{owner}/{repo}/contents/{target-path}. +If a file already exists at that path, it will auto-detect the SHA and update; otherwise it will create. +EOF + exit 1 +} + +if [ $# -ne 7 ]; then + usage +fi + +OWNER="$1" +REPO="$2" +BRANCH="$3" +TARGET_PATH="$4" +ARTIFACT_PATH="$5" +COMMIT_MSG="$6" +TOKEN="$7" + +if [ ! -f "$ARTIFACT_PATH" ]; then + echo "Error: artifact file not found: $ARTIFACT_PATH" >&2 + exit 1 +fi + +LOCAL_SHA=$(git hash-object "$ARTIFACT_PATH") +echo "Local blob SHA: $LOCAL_SHA" + +GET_URL="https://api.github.com/repos/${OWNER}/${REPO}/contents/${TARGET_PATH}?ref=${BRANCH}" +GET_RESPONSE=$(curl -s -H "Authorization: token ${TOKEN}" "$GET_URL") + +REMOTE_SHA=$(echo "$GET_RESPONSE" | jq -r .sha 2>/dev/null || echo "") + +if [ "$REMOTE_SHA" != "null" ] && [ -n "$REMOTE_SHA" ]; then + echo "Remote blob SHA: $REMOTE_SHA" + if [ "$LOCAL_SHA" = "$REMOTE_SHA" ]; then + echo "The remote file is identical. Skipping upload." + exit 0 + else + echo "Remote file differs. Preparing to upload." + fi +else + echo "No existing remote file or no SHA found. Creating." +fi + +CONTENT_TMP_BASE64=$(mktemp) +if base64 --help 2>&1 | grep -q -- "-w"; then + base64 -w 0 "$ARTIFACT_PATH" > "$CONTENT_TMP_BASE64" +else + base64 "$ARTIFACT_PATH" | tr -d '\n' > "$CONTENT_TMP_BASE64" +fi + +PAYLOAD_TMP=$(mktemp) +jq -n \ + --arg message "$COMMIT_MSG" \ + --arg branch "$BRANCH" \ + --arg sha "$REMOTE_SHA" \ + --rawfile content "$CONTENT_TMP_BASE64" \ + '{ + message: $message, + content: $content, + branch: $branch + } + (if ($sha != "" and $sha != "null") then { sha: $sha } else {} end)' \ + > "$PAYLOAD_TMP" + +UPLOAD_RESPONSE=$(curl -s -X PUT \ + -H "Authorization: token ${TOKEN}" \ + -H "Content-Type: application/json" \ + -d @"$PAYLOAD_TMP" \ + "https://api.github.com/repos/${OWNER}/${REPO}/contents/${TARGET_PATH}") + +echo "Upload Response:" +echo "$UPLOAD_RESPONSE" + +rm -f "$CONTENT_TMP_BASE64" "$PAYLOAD_TMP" From c0bb1061fe87690632b07cf6615b3418dd6e1227 Mon Sep 17 00:00:00 2001 From: Timon Schelling Date: Fri, 26 Sep 2025 08:15:31 +0000 Subject: [PATCH 2/2] desktop enable shader nodes --- desktop/wrapper/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/wrapper/Cargo.toml b/desktop/wrapper/Cargo.toml index 53302baadb..00c970c8f9 100644 --- a/desktop/wrapper/Cargo.toml +++ b/desktop/wrapper/Cargo.toml @@ -10,7 +10,7 @@ rust-version = "1.87" [features] default = ["gpu"] -gpu = ["graphite-editor/gpu"] +gpu = ["graphite-editor/gpu", "graphene-std/shader-nodes"] [dependencies] # Local dependencies