Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
136 commits
Select commit Hold shift + click to select a range
7a29612
fix: declare camera usage in macOS bundle Info.plist
knipknap Oct 8, 2026
5c424f5
fix: wait before first camera read to avoid AVFoundation segfault
knipknap Oct 8, 2026
d018888
Updated to use ruida-pa 0.22.0.
StevenIsaacs Oct 9, 2026
dd0a7be
feature: Add TCP protocol support for Ruida network connections
StevenIsaacs Oct 9, 2026
8a1a5b8
feature: Log MAINBOARD_VERSION and MACHINE_FEATURES controller info
StevenIsaacs Oct 9, 2026
f9f7878
feature: Log the ruida-pa version at connection time
StevenIsaacs Oct 9, 2026
27c4bb7
feat(import): import GIF, TIFF and WebP bitmaps
switch87 Oct 9, 2026
d0a009b
feat(import): import Adobe Illustrator and EPS/PostScript files
switch87 Oct 9, 2026
1e31634
feat(import): import HPGL plot files
switch87 Oct 9, 2026
318cc9f
fix(import): don't suggest trace mode for files that cannot be read
switch87 Oct 9, 2026
f666a77
feat(import): remember the original file of converted sources
switch87 Oct 9, 2026
73858e4
feature: Route Z home to the auto-focus routine
StevenIsaacs Oct 9, 2026
ff69790
Merge pull request #511 from barebaric/fix/macos-camera-crash-510
knipknap Oct 9, 2026
5b846f0
fix: Guard empty-tuple value unwrap (lint + latent IndexError)
StevenIsaacs Oct 9, 2026
9f4a416
feat: optional camera view outside the workarea
atkaper Oct 9, 2026
4f14bae
Merge pull request #520 from StevenIsaacs/rpa-0.22.0
knipknap Oct 10, 2026
f435280
Merge pull request #533 from switch87/feat/import-formats
knipknap Oct 10, 2026
4e3b900
feat: reload imported sources from disk in place
switch87 Oct 9, 2026
f8dee9e
feat: ask to reload imported files that changed on disk
switch87 Oct 9, 2026
6dc0e41
feat: relink imported sources and add a watch preference
switch87 Oct 9, 2026
0fa62b2
feat: add reload and relink actions and a watch preference
switch87 Oct 9, 2026
a506546
feat: report where dropped tabs were on reload
switch87 Oct 9, 2026
71e79a2
fix: type SourceReloadMonitor parent as Gtk.Window
switch87 Oct 9, 2026
a60df61
fix(ui): show enum-backed step values in their choice rows
switch87 Oct 9, 2026
6f5f647
feat(image): add error-diffusion kernels and halftone screens
switch87 Oct 9, 2026
ebe11ac
feat(engrave): expose serpentine and halftone settings
switch87 Oct 9, 2026
854f8d2
feat(lightburn): keep the image layer's dither mode on import
switch87 Oct 9, 2026
1c1992f
docs: document the new dithering algorithms
switch87 Oct 9, 2026
9849c7b
feat(editor): add path clean-up commands for workpieces
switch87 Oct 9, 2026
63748b2
feat(ui): expose path clean-up tools in Object and context menus
switch87 Oct 9, 2026
550e176
perf(editor): index contours spatially when deleting duplicates
switch87 Oct 9, 2026
458ba41
Merge branch 'main' into feat/optional-camera-view-outside-workarea
atkaper Oct 10, 2026
013e985
fix(pipeline): pass the step's bidirectional scan offset to its trans…
switch87 Oct 9, 2026
a22d5c7
feat(machine): speed-dependent bidirectional scan offset table
switch87 Oct 9, 2026
4f626b0
feat(ui): edit the bidirectional scan offset table in machine settings
switch87 Oct 9, 2026
c4f43af
refactor(doceditor): use raygeo's path clean-up operations
switch87 Oct 10, 2026
27cbfbd
refactor(image): back the dither algorithms with raygeo 1.62
knipknap Oct 10, 2026
634d5ce
Merge pull request #534 from switch87/feat/dither-algorithms
knipknap Oct 10, 2026
9bef11f
fix(ruida): home X or Y individually
medoix Oct 1, 2026
8e3e0cf
Merge remote-tracking branch 'origin/main' into feat/vector-cleanup
switch87 Oct 11, 2026
4f044eb
fix: Sculpfun S30 focus laser uses M4 (no output at standstill)
knipknap Oct 9, 2026
7f334a8
Merge branch 'main' into feat/bidir-offset-table
knipknap Oct 11, 2026
83a3ef3
Merge pull request #545 from medoix/fix/ruida-single-axis-home
knipknap Oct 11, 2026
c528b4f
Merge pull request #531 from barebaric/fix/sculpfun-s9-focus
knipknap Oct 11, 2026
7199db3
fix: constrain snap store badge height in README
knipknap Oct 11, 2026
c4b1ad9
fix: outside view settings are display-only
knipknap Oct 11, 2026
ffa096a
fix: clear the raw camera frame together with the processed one
knipknap Oct 11, 2026
8ca6a0a
chore(deps): bump raygeo to 1.63.0
knipknap Oct 11, 2026
44800f7
docs: document the view outside the workspace
knipknap Oct 11, 2026
ef13caa
fix(ui): keep the tolerance row title on one line
knipknap Oct 11, 2026
f3aaef0
feat(screenshot): add main:path-cleanup target
knipknap Oct 11, 2026
d3e2c7b
docs: fix internal links and embed the Close Paths dialog
knipknap Oct 11, 2026
326776a
docs: document reload and relink of imported sources
knipknap Oct 11, 2026
118afbb
Merge pull request #537 from switch87/feat/reload-changed-source
knipknap Oct 11, 2026
28809f7
Merge branch 'main' into feat/vector-cleanup
knipknap Oct 11, 2026
37080c3
Merge pull request #543 from atkaper/feat/optional-camera-view-outsid…
knipknap Oct 11, 2026
fc2b8fb
Merge pull request #532 from switch87/feat/vector-cleanup
knipknap Oct 11, 2026
6f7cd13
feat(machine): choose how Z homes in Homing and Startup
medoix Oct 11, 2026
af9e757
feat(screenshots): capture the bidirectional scan offset table
knipknap Oct 11, 2026
d0adb07
docs: document the speed-dependent bidirectional scan offset table
knipknap Oct 11, 2026
c549447
docs: add the bidirectional scan offset diagram images
knipknap Oct 11, 2026
c9ac566
Merge pull request #536 from switch87/feat/bidir-offset-table
knipknap Oct 12, 2026
260cf5c
feat(post): add a Perforation post-processor for Contour steps
switch87 Oct 9, 2026
22e916e
docs: document the Perforation post-processor
switch87 Oct 9, 2026
4ad1f89
docs(website): fill in the zh-CN description of the Perforation page
switch87 Oct 11, 2026
cbe29de
deps: update pixi dependencies
knipknap Oct 12, 2026
170adb7
ci: fix pixi dependency diff to include explicit deps
knipknap Oct 12, 2026
3e5193d
Merge pull request #548 from medoix/feature/z-homing-mode
knipknap Oct 12, 2026
d376651
feat: import SVGZ (Inkscape's compressed SVG) Refs #546
switch87 Oct 11, 2026
330e5d8
feat: register SVGZ with the desktop, installers and docs
switch87 Oct 12, 2026
e9cda7e
Merge pull request #551 from barebaric/pixi-dependabot
knipknap Oct 12, 2026
a3305ae
docs: translate the SVGZ import docs into all site languages
knipknap Oct 12, 2026
5ef3cc3
refactor: add a non-destructive image edit stack to workpieces
switch87 Oct 12, 2026
9dab837
feat: add the Image Editing addon with Invert Image
switch87 Oct 12, 2026
9ddb7c4
refactor(laser): move Engrave's Invert to the Invert image edit
switch87 Oct 12, 2026
a3ee5d0
test: narrow the optional workflow before adding steps
switch87 Oct 12, 2026
898b34a
chore(deps): bump prefix-dev/setup-pixi from 0.10.2 to 0.11.0
dependabot[bot] Oct 12, 2026
2bde40f
Merge pull request #558 from barebaric/dependabot/github_actions/pref…
knipknap Oct 12, 2026
9b5e99c
fix: attribute action extension handlers by identity; add enabled_when
knipknap Oct 12, 2026
c3d521b
Merge pull request #561 from barebaric/fix/action-registration
knipknap Oct 12, 2026
8bb3f62
Merge remote-tracking branch 'origin/main' into feat/image-edit-registry
knipknap Oct 12, 2026
a5f923d
refactor: register Invert Image via the enabled_when action API
knipknap Oct 12, 2026
aa9a6b2
feat(screenshots): recapture the engrave step settings
knipknap Oct 12, 2026
ef3849f
docs: add image editing examples and translations
knipknap Oct 12, 2026
b19df26
chore(deps): bump raygeo to 1.64.0
knipknap Oct 13, 2026
32ec79d
Merge pull request #552 from switch87/feat/image-edit-registry
knipknap Oct 13, 2026
4418bc5
feat(image-edit): give edits the resolution in pixels per mm
switch87 Oct 13, 2026
0aa3b64
feat(image-edit): add tone and sharpen edits with an Adjust Image dialog
switch87 Oct 13, 2026
60a6b0d
docs: document the Adjust Image edit
switch87 Oct 13, 2026
6dcfdf2
perf(image-edit): bound the workpiece and source image caches
switch87 Oct 13, 2026
97c96ce
feat(sketcher): add a Polygon tool for regular polygons and stars
switch87 Oct 12, 2026
77f6193
test(cache): type the byte-budget LruCache tests for pyright
switch87 Oct 13, 2026
87fe0b1
feat(frame): let the user choose whether the frame includes overscan
knipknap Oct 14, 2026
4144ebc
feat(frame): use raygeo 1.65.0 powered_rect, drop the fallback
knipknap Oct 14, 2026
4d82acf
fix(ui): import the frame popover from the ui doceditor package
knipknap Oct 14, 2026
c5fbdae
Merge pull request #566 from barebaric/fix/frame-overscan-choice
knipknap Oct 14, 2026
7e4d2d4
refactor(image-edit): restyle the Adjust Image dialog
knipknap Oct 14, 2026
f758f72
docs(image-edit): show the Adjust Image dialog in the docs
knipknap Oct 14, 2026
fa1c330
Merge pull request #535 from switch87/feat/image-adjustments
knipknap Oct 15, 2026
19d4445
Merge pull request #547 from switch87/feat/import-svgz
knipknap Oct 15, 2026
1487d4b
update translations
knipknap Oct 15, 2026
1bab19e
chore: leave the translation catalogs to the release update
switch87 Oct 15, 2026
be8c16b
fix(post): keep the Tabs progress label for the tabs spec
switch87 Oct 15, 2026
e2e73ef
refactor(post): bound the perforation rows by the transformer minimum
switch87 Oct 15, 2026
c1f7e6e
docs(sketcher): apply site-format to the polygon pages
switch87 Oct 15, 2026
9678b0c
fix(sketcher): remove polygon preview lines through the registry
switch87 Oct 15, 2026
bd8ce6f
fix(sketcher): join a polygon's first corner to a snapped point
switch87 Oct 15, 2026
56d4da4
docs: translate the Polygon page
switch87 Oct 15, 2026
5892810
refactor(step): replace generated_workpiece_uid with a workpiece filter
knipknap Oct 15, 2026
c4300f5
docs: add PR template enforcement and AI policy
knipknap Oct 15, 2026
988591f
autoformat
knipknap Oct 15, 2026
6e25e14
docs: screenshot the Perforation post-processor and its result
knipknap Oct 15, 2026
972370d
docs: rework the Perforation page prose and embed the screenshots
knipknap Oct 15, 2026
e4654cc
feat(doceditor): let the step settings dialog open on the Workpieces …
knipknap Oct 15, 2026
90dfd2a
docs(operations): document the Workpieces tab
knipknap Oct 15, 2026
4303b74
Merge pull request #567 from barebaric/refactor/workpiece-filter
knipknap Oct 15, 2026
1aab4de
fix(pipeline): stamp workpiece artifacts with their generation size
knipknap Oct 15, 2026
76a4b14
Merge pull request #540 from switch87/feat/perforation
knipknap Oct 15, 2026
5b5c02c
chore(deps): bump raygeo to 1.66.0
knipknap Oct 15, 2026
2861de2
Merge pull request #568 from barebaric/fix/material-grid-stale-size
knipknap Oct 15, 2026
e1dfc00
Merge pull request #570 from barebaric/chore/bump-raygeo-1.66.0
knipknap Oct 15, 2026
cb4c98d
prepare translations, changelog and metainfo for release 1.13.0-beta1
knipknap Oct 16, 2026
7d17d39
fix(website): stop offering the .deb as the AppImage download
knipknap Oct 16, 2026
3f8590b
fix(build): drop invalid Prerelease field from winget manifests
knipknap Oct 16, 2026
f96819b
fix: renaming an item no longer triggers a full re-render
knipknap Oct 16, 2026
96f51fa
Merge pull request #572 from barebaric/fix/571-rename-no-rerender
knipknap Oct 16, 2026
1caf7bc
Merge remote-tracking branch 'origin/main' into feat/sketch-polygon
knipknap Oct 16, 2026
46d731b
docs(sketcher): screenshot the polygon tool's result
knipknap Oct 16, 2026
31d756f
docs(i18n): embed the polygon screenshot in every translation
knipknap Oct 16, 2026
0a51a05
Merge pull request #553 from switch87/feat/sketch-polygon
knipknap Oct 16, 2026
b1f45fc
fix(machine): evaluate jog limits in work coordinates
knipknap Oct 17, 2026
ec05fd0
fix(appimage): repair TLS and Wayland keymap lookup in AppRun
knipknap Oct 17, 2026
f59ab7b
docs(website): translate soft limits change for all languages
knipknap Oct 17, 2026
f1cd783
Merge pull request #577 from barebaric/fix/574-jog-limits-wrong-coord…
knipknap Oct 17, 2026
60777ad
Merge pull request #579 from barebaric/fix/appimage-apprun-paths
knipknap Oct 17, 2026
afba25f
fix(ui): offer the commands in error messages as copy rows
switch87 Oct 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
26 changes: 26 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
**PRs that do not fill out this template are rejected without review.**

**What does this PR change?**

A clear and concise description of the change and the problem it solves.

**Why did you choose this specific architectural approach?**

Explain your reasoning in terms of Rayforge's existing architecture. Which
alternatives did you consider, and why did you reject them?

**How did you manually test this locally?**

Describe the exact steps you performed to verify the change, so a maintainer
can reproduce them:

1.
2.
3.

**Checklist**

- [ ] I am not an AI. I have manually read the code and understand it.
- [ ] I take full responsibility for the quality and architectural fit of
this code.
- [ ] I agree to publish this code under the MIT license.
232 changes: 232 additions & 0 deletions .github/scripts/check_pr_template.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
#!/usr/bin/env python3
"""Check that a pull request description follows the PR template.

Pull requests that leave template sections empty or the checklist
unticked are closed automatically with a comment listing what is
missing. Editing the description into compliance reopens the pull
request. Drafts, bots, and users with write access to the repository
are exempt.
"""

import argparse
import json
import os
import re
import subprocess

MARKER = "<!-- pr-template-check-bot -->"
LABEL = "invalid-template"
MIN_ANSWER_CHARS = 30

BOT_LOGINS = ("dependabot[bot]", "github-actions[bot]")

HEADING_RE = re.compile(r"^\s*\*\*(.+?)\*\*\s*$", re.MULTILINE)

SECTION_HEADINGS = (
"What does this PR change?",
"Why did you choose this specific architectural approach?",
"How did you manually test this locally?",
"Checklist",
)

SECTION_PLACEHOLDERS = {
"What does this PR change?": (
(
"A clear and concise description of the change and the "
"problem it solves."
),
),
"Why did you choose this specific architectural approach?": (
(
"Explain your reasoning in terms of Rayforge's existing "
"architecture. Which alternatives did you consider, and why "
"did you reject them?"
),
),
"How did you manually test this locally?": (
(
"Describe the exact steps you performed to verify the change, "
"so a maintainer can reproduce them:"
),
"1. 2. 3.",
),
}

CHECKBOX_STATEMENTS = (
"I am not an AI. I have manually read the code and understand it.",
(
"I take full responsibility for the quality and architectural "
"fit of this code."
),
"I agree to publish this code under the MIT license.",
)


def gh_api(*args):
proc = subprocess.run(
["gh", "api", *args], capture_output=True, text=True, check=False
)
if proc.returncode != 0:
raise RuntimeError(f"gh api {args}: {proc.stderr.strip()}")
return json.loads(proc.stdout)


def gh_run(*args, stdin=None):
proc = subprocess.run(
["gh", *args], input=stdin, capture_output=True, text=True, check=False
)
if proc.returncode != 0:
raise RuntimeError(f"gh {args}: {proc.stderr.strip()}")
return proc.stdout


def normalize(text):
return re.sub(r"\s+", " ", text or "").strip()


def split_sections(body):
matches = list(HEADING_RE.finditer(body))
sections = {}
for index, match in enumerate(matches):
if index + 1 < len(matches):
end = matches[index + 1].start()
else:
end = len(body)
heading = normalize(match.group(1))
sections[heading] = normalize(body[match.end() : end])
return sections


def answer_text(text, heading):
for placeholder in SECTION_PLACEHOLDERS.get(heading, ()):
text = text.replace(normalize(placeholder), "")
return text.strip()


def check_checklist(text):
problems = []
for statement in CHECKBOX_STATEMENTS:
pattern = re.compile(
r"[-*+] \[([x ])\] " + re.escape(statement), re.IGNORECASE
)
match = pattern.search(text)
if not match:
problems.append(f'checklist item "{statement}" is missing')
elif match.group(1).lower() != "x":
problems.append(f'checklist item "{statement}" is not ticked')
return problems


def find_problems(body):
sections = split_sections(body)
problems = []
for heading in SECTION_HEADINGS:
if heading not in sections:
problems.append(f'section "**{heading}**" is missing')
continue
if heading == "Checklist":
problems.extend(check_checklist(sections[heading]))
continue
answer = answer_text(sections[heading], heading)
if len(answer) < MIN_ANSWER_CHARS:
problems.append(f'section "**{heading}**" is not filled out')
return problems


def rejection_comment(repo, problems):
template = (
f"https://github.com/{repo}/blob/main/.github/PULL_REQUEST_TEMPLATE.md"
)
contributing = f"https://github.com/{repo}/blob/main/CONTRIBUTING.md"
items = "\n".join(f"- {problem}" for problem in problems)
return (
f"{MARKER}\n\n"
"This pull request was closed automatically because its "
"description does not follow the "
f"[pull request template]({template}). Problems found:\n\n"
f"{items}\n\n"
"Please edit the pull request description to answer every "
"section and to tick every checkbox; as soon as it complies, "
"the pull request is reopened automatically. See "
f"[CONTRIBUTING.md]({contributing})."
)


def reopen_comment():
return (
f"{MARKER}\n\n"
"The description now follows the pull request template, so "
"this pull request was reopened automatically."
)


def comment_exists(repo, number, body):
comments = gh_api("--paginate", f"repos/{repo}/issues/{number}/comments")
return any(c.get("body") == body for c in comments)


def has_write_access(repo, login):
response = gh_api(f"repos/{repo}/collaborators/{login}/permission")
return response.get("permission") in ("admin", "write")


def has_label(pr, name):
return any(l.get("name") == name for l in pr.get("labels", []))


def reject(repo, number, problems):
comment = rejection_comment(repo, problems)
if not comment_exists(repo, number, comment):
gh_run("pr", "comment", str(number), "--body-file", "-", stdin=comment)
gh_run("pr", "close", str(number))
gh_run(
"label",
"create",
LABEL,
"--force",
"--color",
"E99695",
"--description",
"Does not follow the pull request template",
)
gh_run("pr", "edit", str(number), "--add-label", LABEL)


def unlabel_and_reopen(repo, number, pr):
gh_run("pr", "edit", str(number), "--remove-label", LABEL)
if pr["state"] == "closed" and not pr.get("merged_at"):
gh_run("pr", "reopen", str(number))
gh_run(
"pr",
"comment",
str(number),
"--body-file",
"-",
stdin=reopen_comment(),
)


def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--pr-number", type=int, required=True)
args = parser.parse_args()

repo = os.environ["GITHUB_REPOSITORY"]
pr = gh_api(f"repos/{repo}/pulls/{args.pr_number}")
if pr.get("draft"):
return
login = pr.get("user", {}).get("login", "")
if login in BOT_LOGINS or has_write_access(repo, login):
return

problems = find_problems(pr.get("body") or "")
if problems:
if pr["state"] == "open":
reject(repo, args.pr_number, problems)
return
if has_label(pr, LABEL):
unlabel_and_reopen(repo, args.pr_number, pr)


if __name__ == "__main__":
main()
3 changes: 2 additions & 1 deletion .github/workflows/build-appimage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
echo "Version: $VERSION"

- name: Install Pixi
uses: prefix-dev/setup-pixi@v0.10.2
uses: prefix-dev/setup-pixi@v0.11.0
with:
pixi-version: v0.68.1
frozen: true
Expand Down Expand Up @@ -75,6 +75,7 @@ jobs:
run: |
xvfb-run -a ./dist/Rayforge-*.AppImage --version
xvfb-run -a ./dist/Rayforge-*.AppImage --exit
./dist/Rayforge-*.AppImage --apprun-selfcheck

release:
name: Attach AppImage to GitHub Release
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/build-exe.yml
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,10 @@ jobs:
- name: Validate Manifests
shell: pwsh
run: |
winget validate --manifest "$env:GITHUB_WORKSPACE\winget-manifests"
# winget exits nonzero on warnings; some winget builds falsely warn
# about the schema header URL, and the winget-pkgs pipeline performs
# the authoritative validation anyway.
winget validate --manifest "$env:GITHUB_WORKSPACE\winget-manifests" --ignore-warnings

- name: Determine PR Title
id: prtitle
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/lint-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
fetch-tags: true

- name: Install Pixi
uses: prefix-dev/setup-pixi@v0.10.2
uses: prefix-dev/setup-pixi@v0.11.0
with:
pixi-version: v0.68.1
frozen: true
Expand All @@ -46,7 +46,7 @@ jobs:
fetch-tags: true

- name: Install Pixi
uses: prefix-dev/setup-pixi@v0.10.2
uses: prefix-dev/setup-pixi@v0.11.0
with:
pixi-version: v0.68.1
frozen: true
Expand All @@ -70,7 +70,7 @@ jobs:
fetch-tags: true

- name: Install Pixi
uses: prefix-dev/setup-pixi@v0.10.2
uses: prefix-dev/setup-pixi@v0.11.0
with:
pixi-version: v0.68.1
frozen: true
Expand All @@ -94,7 +94,7 @@ jobs:
fetch-tags: true

- name: Install Pixi
uses: prefix-dev/setup-pixi@v0.10.2
uses: prefix-dev/setup-pixi@v0.11.0
with:
pixi-version: v0.68.1
frozen: true
Expand Down
14 changes: 8 additions & 6 deletions .github/workflows/pixi-dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,11 @@ jobs:
uses: actions/checkout@v7

- name: Install Pixi
uses: prefix-dev/setup-pixi@v0.10.2
uses: prefix-dev/setup-pixi@v0.11.0
with:
pixi-version: v0.76.2
run-install: false

- name: Generate dependency diff
run: |
set -o pipefail
pixi update --json | pixi exec pixi-diff-to-markdown >> diff.md

- name: Upgrade dependencies
run: |
: > requirements.txt
Expand All @@ -37,6 +32,13 @@ jobs:
pixi clean cache -y
pixi update

- name: Generate dependency diff
run: |
set -o pipefail
git show HEAD:pixi.lock \
| pixi exec pixi-diff --after pixi.lock --manifest-path pixi.toml \
| pixi exec pixi-diff-to-markdown > diff.md

- name: Create pull request
uses: peter-evans/create-pull-request@v8
with:
Expand Down
31 changes: 31 additions & 0 deletions .github/workflows/pr-template-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: PR Template Check

on:
pull_request_target:
types:
- opened
- edited
- reopened
- ready_for_review

permissions:
issues: write
pull-requests: write

jobs:
check:
if: >-
github.event.pull_request.author_association != 'OWNER' &&
github.event.pull_request.author_association != 'MEMBER' &&
github.event.pull_request.author_association != 'COLLABORATOR'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v7

- name: Check the pull request template
env:
GH_TOKEN: ${{ github.token }}
run: |
python3 .github/scripts/check_pr_template.py \
--pr-number "${{ github.event.pull_request.number }}"
2 changes: 1 addition & 1 deletion .github/workflows/publish-to-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
fetch-tags: true

- name: Install Pixi
uses: prefix-dev/setup-pixi@v0.10.2
uses: prefix-dev/setup-pixi@v0.11.0
with:
pixi-version: latest
frozen: true
Expand Down
Loading
Loading