From 30aa9eb58087cbcb5968af91ac2cfd3f75a92315 Mon Sep 17 00:00:00 2001 From: Drew Smirnoff Date: Sun, 17 May 2026 23:07:25 +0400 Subject: [PATCH 1/6] ci: nixOS special version (#1300) ## What? Separated `go` and `toolchain` versions, makes workflow dispatch only, adds a workflow with a cron job to check nixos go version ## Why? @r-ryantm fails due to `go 1.26.3` being non-existent on the master branch of nixos/nix-pkgs. This will make it so that: if the user/workflow can use the latest version of Go --> it downloads and uses it, otherwise it uses the version set in `go` (which will be up to date to nixos-pkgs master version). Signed-off-by: drew --- .github/workflows/nixpkgs-bump.yml | 88 +++++---------------------- .github/workflows/sync-go-nixpkgs.yml | 86 ++++++++++++++++++++++++++ go.mod | 4 +- renovate.json | 10 ++- 4 files changed, 114 insertions(+), 74 deletions(-) create mode 100644 .github/workflows/sync-go-nixpkgs.yml diff --git a/.github/workflows/nixpkgs-bump.yml b/.github/workflows/nixpkgs-bump.yml index c96cd93..44b8c05 100644 --- a/.github/workflows/nixpkgs-bump.yml +++ b/.github/workflows/nixpkgs-bump.yml @@ -1,16 +1,15 @@ name: Nixpkgs Bump PR -# Triggers on stable release publish. Opens PR against NixOS/nixpkgs -# bumping pkgs/by-name/ma/matcha/package.nix to the new version. +# Manual dispatch only. r-ryantm bot handles automated bumps in nixpkgs. +# This workflow exists for emergency / out-of-band bumps. +# Uses whatever Go version is current on nixpkgs master. # Requires: # - Fork floatpane/nixpkgs to exist -# - NIXPKGS_BUMP_TOKEN secret: PAT with `repo` scope on floatpane/nixpkgs +# - HOMEBREW_GITHUB_TOKEN secret: PAT with `repo` scope on floatpane/nixpkgs # and permission to open PRs against NixOS/nixpkgs -# - Initial matcha package already merged into nixpkgs (this workflow updates, not inits) +# - Initial matcha package already merged into nixpkgs on: - release: - types: [published] workflow_dispatch: inputs: version: @@ -24,33 +23,13 @@ jobs: bump: runs-on: ubuntu-latest steps: - - name: Determine version - id: ver - run: | - if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then - VERSION="${{ inputs.version }}" - else - TAG="${{ github.event.release.tag_name }}" - VERSION="${TAG#v}" - fi - # Skip nightly / preview tags - if [[ "$VERSION" == nightly* || "$VERSION" == preview* ]]; then - echo "Skipping non-stable release: $VERSION" - echo "skip=true" >> $GITHUB_OUTPUT - else - echo "skip=false" >> $GITHUB_OUTPUT - fi - echo "version=$VERSION" >> $GITHUB_OUTPUT - - name: Install Nix - if: steps.ver.outputs.skip != 'true' uses: cachix/install-nix-action@v31 with: extra_nix_config: | experimental-features = nix-command flakes - name: Checkout nixpkgs fork - if: steps.ver.outputs.skip != 'true' uses: actions/checkout@v6 with: repository: floatpane/nixpkgs @@ -59,19 +38,17 @@ jobs: fetch-depth: 0 - name: Sync fork with upstream master - if: steps.ver.outputs.skip != 'true' working-directory: nixpkgs run: | git config user.name "Floatpane Bot" git config user.email "us@floatpane.com" git remote add upstream https://github.com/NixOS/nixpkgs.git - git fetch upstream master staging + git fetch upstream master git checkout master git reset --hard upstream/master git push origin master --force-with-lease - name: Get current version (from master) - if: steps.ver.outputs.skip != 'true' id: current working-directory: nixpkgs run: | @@ -79,54 +56,28 @@ jobs: OLD=$(grep -E '^\s*version\s*=\s*"' "$PKG" | head -1 | sed -E 's/.*"([^"]+)".*/\1/') echo "old=$OLD" >> $GITHUB_OUTPUT - - name: Write go overlay from staging - if: steps.ver.outputs.skip != 'true' - working-directory: nixpkgs - run: | - # master nixpkgs heavily cached. Staging has go_1_26 = 1.26.3. - # Overlay swaps only go_1_26 → minimal rebuild. - STAGING_REV=$(git rev-parse upstream/staging) - echo "STAGING_REV=$STAGING_REV" >> $GITHUB_ENV - cat > /tmp/go-overlay.nix <> $GITHUB_ENV - name: Bump version and reset hashes - if: steps.ver.outputs.skip != 'true' working-directory: nixpkgs run: | PKG=pkgs/by-name/ma/matcha/package.nix - NEW="${{ steps.ver.outputs.version }}" - # Replace version line + NEW="${{ inputs.version }}" sed -i -E "s/(version\s*=\s*\")[^\"]+(\")/\1$NEW\2/" "$PKG" - # Reset src hash + vendorHash to fakeHash so nix build prints real ones sed -i -E 's|hash = "sha256-[A-Za-z0-9+/=]+"|hash = lib.fakeHash|' "$PKG" sed -i -E 's|vendorHash = "sha256-[A-Za-z0-9+/=]+"|vendorHash = lib.fakeHash|' "$PKG" - name: Prefetch src hash (no build) - if: steps.ver.outputs.skip != 'true' id: src_hash working-directory: nixpkgs run: | - NEW="${{ steps.ver.outputs.version }}" + NEW="${{ inputs.version }}" URL="https://github.com/floatpane/matcha/archive/refs/tags/v$NEW.tar.gz" - # --unpack matches fetchFromGitHub (NAR hash of unpacked tarball) BASE32=$(nix-prefetch-url --unpack "$URL") HASH=$(nix hash to-sri --type sha256 "$BASE32") echo "Resolved SRI hash: $HASH" @@ -134,13 +85,10 @@ jobs: sed -i -E "s|hash = lib.fakeHash|hash = \"$HASH\"|" pkgs/by-name/ma/matcha/package.nix - name: Build to extract vendorHash - if: steps.ver.outputs.skip != 'true' working-directory: nixpkgs run: | set +e - nix-build ./. -A matcha --no-out-link \ - --arg overlays "[ (import /tmp/go-overlay.nix) ]" \ - 2>&1 | tee /tmp/build-vendor.log + nix-build ./. -A matcha --no-out-link 2>&1 | tee /tmp/build-vendor.log HASH=$(grep -oE 'got:[[:space:]]+sha256-[A-Za-z0-9+/=]+' /tmp/build-vendor.log | head -1 | awk '{print $2}') if [ -z "$HASH" ]; then echo "Failed to extract vendorHash"; exit 1 @@ -148,22 +96,18 @@ jobs: sed -i -E "s|vendorHash = lib.fakeHash|vendorHash = \"$HASH\"|" pkgs/by-name/ma/matcha/package.nix - name: Final build (sanity check) - if: steps.ver.outputs.skip != 'true' working-directory: nixpkgs run: | - nix-build ./. -A matcha --no-out-link \ - --arg overlays "[ (import /tmp/go-overlay.nix) ]" + nix-build ./. -A matcha --no-out-link - name: Commit and push - if: steps.ver.outputs.skip != 'true' working-directory: nixpkgs run: | git add pkgs/by-name/ma/matcha/package.nix - git commit -m "matcha: ${{ steps.current.outputs.old }} -> ${{ steps.ver.outputs.version }}" + git commit -m "matcha: ${{ steps.current.outputs.old }} -> ${{ inputs.version }}" git push -u origin "$BRANCH" --force-with-lease - name: Open PR against NixOS/nixpkgs - if: steps.ver.outputs.skip != 'true' env: GH_TOKEN: ${{ secrets.HOMEBREW_GITHUB_TOKEN }} working-directory: nixpkgs @@ -171,11 +115,11 @@ jobs: BODY=$(cat < ${{ steps.ver.outputs.version }}" \ + --title "matcha: ${{ steps.current.outputs.old }} -> ${{ inputs.version }}" \ --body "$BODY" diff --git a/.github/workflows/sync-go-nixpkgs.yml b/.github/workflows/sync-go-nixpkgs.yml new file mode 100644 index 0000000..312fdf5 --- /dev/null +++ b/.github/workflows/sync-go-nixpkgs.yml @@ -0,0 +1,86 @@ +name: Sync go.mod minimum from nixpkgs master + +# Renovate manages `toolchain` directive (preferred Go). +# This workflow manages `go` directive (minimum Go) to track nixpkgs master. +# Keeps r-ryantm / nixpkgs sandbox builds passing. + +on: + schedule: + - cron: "0 6 * * *" + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + token: ${{ secrets.HOMEBREW_GITHUB_TOKEN }} + + - uses: cachix/install-nix-action@v31 + with: + extra_nix_config: | + experimental-features = nix-command flakes + + - name: Get nixpkgs master Go version + id: nixgo + run: | + VER=$(nix eval --raw --impure --expr \ + '(import (builtins.fetchTarball "https://github.com/NixOS/nixpkgs/archive/master.tar.gz") {}).go_1_26.version') + echo "version=$VER" + echo "version=$VER" >> $GITHUB_OUTPUT + + - name: Get current go.mod values + id: current + run: | + GO=$(grep -E '^go [0-9.]+$' go.mod | awk '{print $2}') + TC=$(grep -E '^toolchain go[0-9.]+$' go.mod | sed 's/toolchain go//') + echo "go=$GO" >> $GITHUB_OUTPUT + echo "toolchain=$TC" >> $GITHUB_OUTPUT + + - name: Bump go.mod if needed + id: bump + run: | + NEW="${{ steps.nixgo.outputs.version }}" + GO="${{ steps.current.outputs.go }}" + TC="${{ steps.current.outputs.toolchain }}" + CHANGED=false + if [ "$GO" != "$NEW" ]; then + sed -i -E "s/^go [0-9.]+$/go $NEW/" go.mod + CHANGED=true + fi + # If toolchain now < go minimum, raise toolchain to match + if [ -n "$TC" ]; then + LOWER=$(printf '%s\n%s\n' "$TC" "$NEW" | sort -V | head -1) + if [ "$LOWER" = "$TC" ] && [ "$TC" != "$NEW" ]; then + sed -i -E "s/^toolchain go[0-9.]+$/toolchain go$NEW/" go.mod + CHANGED=true + fi + fi + echo "changed=$CHANGED" >> $GITHUB_OUTPUT + echo "old=$GO" >> $GITHUB_OUTPUT + echo "new=$NEW" >> $GITHUB_OUTPUT + + - name: Open PR + if: steps.bump.outputs.changed == 'true' + uses: peter-evans/create-pull-request@v7 + with: + token: ${{ secrets.HOMEBREW_GITHUB_TOKEN }} + committer: "Floatpane Bot " + author: "Floatpane Bot " + commit-message: "chore: bump go.mod minimum to ${{ steps.bump.outputs.new }} (nixpkgs master)" + branch: sync-go-nixpkgs + delete-branch: true + title: "chore: bump go.mod minimum to ${{ steps.bump.outputs.new }}" + body: | + nixpkgs master ships Go `${{ steps.bump.outputs.new }}`. + Bump `go` directive in `go.mod` to match (was `${{ steps.bump.outputs.old }}`). + + Keeps r-ryantm / nixpkgs sandbox builds passing. + `toolchain` directive raised only if it fell below the new minimum. + labels: | + dependencies diff --git a/go.mod b/go.mod index b4ce7af..76a869d 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,8 @@ module github.com/floatpane/matcha -go 1.26.3 +go 1.26.2 + +toolchain go1.26.3 require ( charm.land/bubbles/v2 v2.1.0 diff --git a/renovate.json b/renovate.json index f928fe5..8a37ad3 100644 --- a/renovate.json +++ b/renovate.json @@ -10,7 +10,15 @@ { "matchManagers": ["gomod"], "matchDepNames": ["go"], - "rangeStrategy": "bump" + "matchDepTypes": ["golang"], + "enabled": false + }, + { + "matchManagers": ["gomod"], + "matchDepNames": ["go"], + "matchDepTypes": ["toolchain"], + "rangeStrategy": "bump", + "groupName": "go toolchain" }, { "matchManagers": ["github-actions"], From 3504ed4c06bb540c52c184e74b14d1a0fe2932d0 Mon Sep 17 00:00:00 2001 From: FromSi Date: Mon, 18 May 2026 00:14:22 +0500 Subject: [PATCH 2/6] fix(pop3): batch delete in one session (#1292) ## What? POP3 batch deletion now sends requests like this: ```text CONNECT AUTH UIDL DELE 1 DELE 2 DELE 3 QUIT ``` `QUIT` is sent once at the end, so all `DELE` commands are committed in one POP3 session. ## Why? Closes #555 Previously, batch deletion sent requests like this: ```text CONNECT AUTH UIDL DELE 1 QUIT CONNECT AUTH UIDL DELE 2 QUIT CONNECT AUTH UIDL DELE 3 QUIT ``` So deleting multiple emails repeated the full connection/authentication cycle for every message. --- backend/pop3/pop3.go | 91 ++++++++++++++++++++++++++------------------ 1 file changed, 53 insertions(+), 38 deletions(-) diff --git a/backend/pop3/pop3.go b/backend/pop3/pop3.go index c9f4ca6..a883cf3 100644 --- a/backend/pop3/pop3.go +++ b/backend/pop3/pop3.go @@ -188,25 +188,8 @@ func (p *Provider) MarkAsUnread(_ context.Context, _ string, _ uint32) error { return nil } -func (p *Provider) DeleteEmail(_ context.Context, _ string, uid uint32) error { - conn, err := p.connect() - if err != nil { - return err - } - - msgID, err := p.findMessageByUID(conn, uid) - if err != nil { - conn.Quit() - return err - } - - if err := conn.Dele(msgID); err != nil { - conn.Quit() - return fmt.Errorf("pop3 dele: %w", err) - } - - // Quit commits the deletion - return conn.Quit() +func (p *Provider) DeleteEmail(ctx context.Context, folder string, uid uint32) error { + return p.DeleteEmails(ctx, folder, []uint32{uid}) } func (p *Provider) ArchiveEmail(_ context.Context, _ string, _ uint32) error { @@ -217,14 +200,34 @@ func (p *Provider) MoveEmail(_ context.Context, _ uint32, _, _ string) error { return backend.ErrNotSupported } -func (p *Provider) DeleteEmails(ctx context.Context, folder string, uids []uint32) error { - // POP3 doesn't support batch - loop through individual operations +func (p *Provider) DeleteEmails(_ context.Context, _ string, uids []uint32) error { + if len(uids) == 0 { + return nil + } + + conn, err := p.connect() + if err != nil { + return err + } + + messageIDsByUID, err := p.buildMessageIDsByUID(conn) + if err != nil { + conn.Quit() + return err + } + for _, uid := range uids { - if err := p.DeleteEmail(ctx, folder, uid); err != nil { - return err + msgID, ok := messageIDsByUID[uid] + if !ok { + return fmt.Errorf("pop3: message with UID %d not found", uid) + } + + if err := conn.Dele(msgID); err != nil { + return fmt.Errorf("pop3 dele: %w", err) } } - return nil + + return conn.Quit() } func (p *Provider) ArchiveEmails(_ context.Context, _ string, _ []uint32) error { @@ -261,31 +264,40 @@ func (p *Provider) Close() error { return nil } -// Verify interface compliance at compile time. -var _ backend.Provider = (*Provider)(nil) - -// findMessageByUID finds a POP3 message ID by matching the UID hash. -func (p *Provider) findMessageByUID(conn *pop3client.Conn, uid uint32) (int, error) { +func (p *Provider) buildMessageIDsByUID(conn *pop3client.Conn) (map[uint32]int, error) { msgs, err := conn.Uidl(0) if err != nil { msgs, err = conn.List(0) if err != nil { - return 0, fmt.Errorf("pop3 list: %w", err) + return nil, fmt.Errorf("pop3 list: %w", err) } + + messageIDsByUID := make(map[uint32]int, len(msgs)) for _, m := range msgs { - if hashUID(fmt.Sprintf("%d", m.ID)) == uid { - return m.ID, nil - } + messageIDsByUID[hashUID(fmt.Sprintf("%d", m.ID))] = m.ID } - return 0, fmt.Errorf("pop3: message with UID %d not found", uid) + return messageIDsByUID, nil } + messageIDsByUID := make(map[uint32]int, len(msgs)) for _, m := range msgs { - if hashUID(m.UID) == uid { - return m.ID, nil - } + messageIDsByUID[hashUID(m.UID)] = m.ID } - return 0, fmt.Errorf("pop3: message with UID %d not found", uid) + return messageIDsByUID, nil +} + +// findMessageByUID finds a POP3 message ID by matching the UID hash. +func (p *Provider) findMessageByUID(conn *pop3client.Conn, uid uint32) (int, error) { + messageIDsByUID, err := p.buildMessageIDsByUID(conn) + if err != nil { + return 0, err + } + + msgID, ok := messageIDsByUID[uid] + if !ok { + return 0, fmt.Errorf("pop3: message with UID %d not found", uid) + } + return msgID, nil } // hashUID converts a POP3 UIDL string to a uint32 hash. @@ -300,6 +312,9 @@ func hashUID(uidl string) uint32 { return hash } +// Verify interface compliance at compile time. +var _ backend.Provider = (*Provider)(nil) + // entityToEmail converts message headers to a backend.Email. func entityToEmail(header *message.Header, msgInfo pop3client.MessageID, accountID string) backend.Email { from := header.Get("From") From 0bab451486e1fdd3dc533a2b3e312df85ac78e6b Mon Sep 17 00:00:00 2001 From: Floatpane Bot Date: Sun, 17 May 2026 23:18:57 +0400 Subject: [PATCH 3/6] chore(deps): peter-evans/create-pull-request ^ v8.1.1 (#1302) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What? This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [peter-evans/create-pull-request](https://redirect.github.com/peter-evans/create-pull-request) | action | major | `v7` → `v8` | --- ### Release Notes
peter-evans/create-pull-request (peter-evans/create-pull-request) ### [`v8.1.1`](https://redirect.github.com/peter-evans/create-pull-request/releases/tag/v8.1.1): Create Pull Request v8.1.1 [Compare Source](https://redirect.github.com/peter-evans/create-pull-request/compare/v8.1.0...v8.1.1) #### What's Changed - build(deps-dev): bump the npm group with 2 updates by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​4305](https://redirect.github.com/peter-evans/create-pull-request/pull/4305) - build(deps): bump minimatch by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​4311](https://redirect.github.com/peter-evans/create-pull-request/pull/4311) - build(deps): bump the github-actions group with 2 updates by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​4316](https://redirect.github.com/peter-evans/create-pull-request/pull/4316) - build(deps): bump [@​tootallnate/once](https://redirect.github.com/tootallnate/once) and jest-environment-jsdom by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​4323](https://redirect.github.com/peter-evans/create-pull-request/pull/4323) - build(deps-dev): bump undici from 6.23.0 to 6.24.0 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​4328](https://redirect.github.com/peter-evans/create-pull-request/pull/4328) - build(deps-dev): bump flatted from 3.3.1 to 3.4.2 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​4334](https://redirect.github.com/peter-evans/create-pull-request/pull/4334) - build(deps): bump picomatch by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​4339](https://redirect.github.com/peter-evans/create-pull-request/pull/4339) - build(deps-dev): bump handlebars from 4.7.8 to 4.7.9 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​4344](https://redirect.github.com/peter-evans/create-pull-request/pull/4344) - build(deps-dev): bump the npm group with 3 updates by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​4349](https://redirect.github.com/peter-evans/create-pull-request/pull/4349) - fix: retry post-creation API calls on 422 eventual consistency errors by [@​peter-evans](https://redirect.github.com/peter-evans) in [#​4356](https://redirect.github.com/peter-evans/create-pull-request/pull/4356) **Full Changelog**: ### [`v8.1.0`](https://redirect.github.com/peter-evans/create-pull-request/releases/tag/v8.1.0): Create Pull Request v8.1.0 [Compare Source](https://redirect.github.com/peter-evans/create-pull-request/compare/v8...v8.1.0) #### What's Changed - README.md: bump given GitHub actions to their latest versions by [@​deining](https://redirect.github.com/deining) in [#​4265](https://redirect.github.com/peter-evans/create-pull-request/pull/4265) - build(deps): bump the github-actions group with 2 updates by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​4273](https://redirect.github.com/peter-evans/create-pull-request/pull/4273) - build(deps-dev): bump the npm group with 2 updates by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​4274](https://redirect.github.com/peter-evans/create-pull-request/pull/4274) - build(deps-dev): bump undici from 6.22.0 to 6.23.0 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​4284](https://redirect.github.com/peter-evans/create-pull-request/pull/4284) - Update distribution by [@​actions-bot](https://redirect.github.com/actions-bot) in [#​4289](https://redirect.github.com/peter-evans/create-pull-request/pull/4289) - fix: Handle remote prune failures gracefully on self-hosted runners by [@​peter-evans](https://redirect.github.com/peter-evans) in [#​4295](https://redirect.github.com/peter-evans/create-pull-request/pull/4295) - feat: add [@​octokit/plugin-retry](https://redirect.github.com/octokit/plugin-retry) to handle retriable server errors by [@​peter-evans](https://redirect.github.com/peter-evans) in [#​4298](https://redirect.github.com/peter-evans/create-pull-request/pull/4298) #### New Contributors - [@​deining](https://redirect.github.com/deining) made their first contribution in [#​4265](https://redirect.github.com/peter-evans/create-pull-request/pull/4265) **Full Changelog**: ### [`v8.0.0`](https://redirect.github.com/peter-evans/create-pull-request/releases/tag/v8.0.0): Create Pull Request v8.0.0 [Compare Source](https://redirect.github.com/peter-evans/create-pull-request/compare/v8...v8) #### What's new in v8 - Requires [Actions Runner v2.327.1](https://redirect.github.com/actions/runner/releases/tag/v2.327.1) or later if you are using a self-hosted runner for Node 24 support. #### What's Changed - chore: Update checkout action version to v6 by [@​yonas](https://redirect.github.com/yonas) in [#​4258](https://redirect.github.com/peter-evans/create-pull-request/pull/4258) - Update actions/checkout references to [@​v6](https://redirect.github.com/v6) in docs by [@​Copilot](https://redirect.github.com/Copilot) in [#​4259](https://redirect.github.com/peter-evans/create-pull-request/pull/4259) - feat: v8 by [@​peter-evans](https://redirect.github.com/peter-evans) in [#​4260](https://redirect.github.com/peter-evans/create-pull-request/pull/4260) #### New Contributors - [@​yonas](https://redirect.github.com/yonas) made their first contribution in [#​4258](https://redirect.github.com/peter-evans/create-pull-request/pull/4258) - [@​Copilot](https://redirect.github.com/Copilot) made their first contribution in [#​4259](https://redirect.github.com/peter-evans/create-pull-request/pull/4259) **Full Changelog**: ### [`v8`](https://redirect.github.com/peter-evans/create-pull-request/compare/v7.0.11...v8) [Compare Source](https://redirect.github.com/peter-evans/create-pull-request/compare/v7.0.11...v8) ### [`v7.0.11`](https://redirect.github.com/peter-evans/create-pull-request/releases/tag/v7.0.11): Create Pull Request v7.0.11 [Compare Source](https://redirect.github.com/peter-evans/create-pull-request/compare/v7.0.10...v7.0.11) #### What's Changed - fix: restrict remote prune to self-hosted runners by [@​peter-evans](https://redirect.github.com/peter-evans) in [#​4250](https://redirect.github.com/peter-evans/create-pull-request/pull/4250) **Full Changelog**: ### [`v7.0.10`](https://redirect.github.com/peter-evans/create-pull-request/releases/tag/v7.0.10): Create Pull Request v7.0.10 [Compare Source](https://redirect.github.com/peter-evans/create-pull-request/compare/v7.0.9...v7.0.10) ⚙️ Fixes an issue where updating a pull request failed when targeting a forked repository with the same owner as its parent. #### What's Changed - build(deps): bump the github-actions group with 2 updates by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​4235](https://redirect.github.com/peter-evans/create-pull-request/pull/4235) - build(deps-dev): bump prettier from 3.6.2 to 3.7.3 in the npm group by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​4240](https://redirect.github.com/peter-evans/create-pull-request/pull/4240) - fix: provider list pulls fallback for multi fork same owner by [@​peter-evans](https://redirect.github.com/peter-evans) in [#​4245](https://redirect.github.com/peter-evans/create-pull-request/pull/4245) #### New Contributors - [@​obnyis](https://redirect.github.com/obnyis) made their first contribution in [#​4064](https://redirect.github.com/peter-evans/create-pull-request/pull/4064) **Full Changelog**: ### [`v7.0.9`](https://redirect.github.com/peter-evans/create-pull-request/releases/tag/v7.0.9): Create Pull Request v7.0.9 [Compare Source](https://redirect.github.com/peter-evans/create-pull-request/compare/v7.0.8...v7.0.9) ⚙️ Fixes an [incompatibility](https://redirect.github.com/peter-evans/create-pull-request/issues/4228) with the recently released `actions/checkout@v6`. #### What's Changed - \~70 dependency updates by [@​dependabot](https://redirect.github.com/dependabot) - docs: fix workaround description about `ready_for_review` by [@​ybiquitous](https://redirect.github.com/ybiquitous) in [#​3939](https://redirect.github.com/peter-evans/create-pull-request/pull/3939) - Docs: `add-paths` default behavior by [@​joeflack4](https://redirect.github.com/joeflack4) in [#​3928](https://redirect.github.com/peter-evans/create-pull-request/pull/3928) - docs: update to create-github-app-token v2 by [@​Goooler](https://redirect.github.com/Goooler) in [#​4063](https://redirect.github.com/peter-evans/create-pull-request/pull/4063) - Fix compatibility with actions/checkout\@​v6 by [@​ericsciple](https://redirect.github.com/ericsciple) in [#​4230](https://redirect.github.com/peter-evans/create-pull-request/pull/4230) #### New Contributors - [@​joeflack4](https://redirect.github.com/joeflack4) made their first contribution in [#​3928](https://redirect.github.com/peter-evans/create-pull-request/pull/3928) - [@​Goooler](https://redirect.github.com/Goooler) made their first contribution in [#​4063](https://redirect.github.com/peter-evans/create-pull-request/pull/4063) - [@​ericsciple](https://redirect.github.com/ericsciple) made their first contribution in [#​4230](https://redirect.github.com/peter-evans/create-pull-request/pull/4230) **Full Changelog**: ### [`v7.0.8`](https://redirect.github.com/peter-evans/create-pull-request/releases/tag/v7.0.8): Create Pull Request v7.0.8 [Compare Source](https://redirect.github.com/peter-evans/create-pull-request/compare/v7.0.7...v7.0.8) #### What's Changed - build(deps-dev): bump ts-jest from 29.2.5 to 29.2.6 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3751](https://redirect.github.com/peter-evans/create-pull-request/pull/3751) - build(deps-dev): bump eslint-import-resolver-typescript from 3.8.1 to 3.8.3 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3752](https://redirect.github.com/peter-evans/create-pull-request/pull/3752) - build(deps): bump [@​octokit/plugin-paginate-rest](https://redirect.github.com/octokit/plugin-paginate-rest) from 11.4.2 to 11.4.3 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3753](https://redirect.github.com/peter-evans/create-pull-request/pull/3753) - build(deps-dev): bump prettier from 3.5.1 to 3.5.2 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3754](https://redirect.github.com/peter-evans/create-pull-request/pull/3754) - fix: suppress output for some git operations by [@​peter-evans](https://redirect.github.com/peter-evans) in [#​3776](https://redirect.github.com/peter-evans/create-pull-request/pull/3776) **Full Changelog**: ### [`v7.0.7`](https://redirect.github.com/peter-evans/create-pull-request/releases/tag/v7.0.7): Create Pull Request v7.0.7 [Compare Source](https://redirect.github.com/peter-evans/create-pull-request/compare/v7.0.6...v7.0.7) ⚙️ Fixes an issue with commit signing where modifications to the same file in multiple commits squash into the first commit. #### What's Changed - build(deps): bump [@​octokit/core](https://redirect.github.com/octokit/core) from 6.1.2 to 6.1.3 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3593](https://redirect.github.com/peter-evans/create-pull-request/pull/3593) - build(deps-dev): bump [@​types/node](https://redirect.github.com/types/node) from 18.19.68 to 18.19.70 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3594](https://redirect.github.com/peter-evans/create-pull-request/pull/3594) - Update distribution by [@​actions-bot](https://redirect.github.com/actions-bot) in [#​3603](https://redirect.github.com/peter-evans/create-pull-request/pull/3603) - build(deps-dev): bump typescript from 5.7.2 to 5.7.3 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3610](https://redirect.github.com/peter-evans/create-pull-request/pull/3610) - build(deps): bump octokit dependencies by [@​peter-evans](https://redirect.github.com/peter-evans) in [#​3618](https://redirect.github.com/peter-evans/create-pull-request/pull/3618) - docs: add workflow tip for showing message via workflow command by [@​ybiquitous](https://redirect.github.com/ybiquitous) in [#​3626](https://redirect.github.com/peter-evans/create-pull-request/pull/3626) - build(deps-dev): bump eslint-plugin-prettier from 5.2.1 to 5.2.3 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3628](https://redirect.github.com/peter-evans/create-pull-request/pull/3628) - build(deps): bump node-fetch-native from 1.6.4 to 1.6.6 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3627](https://redirect.github.com/peter-evans/create-pull-request/pull/3627) - build(deps-dev): bump undici from 6.21.0 to 6.21.1 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3630](https://redirect.github.com/peter-evans/create-pull-request/pull/3630) - build(deps-dev): bump [@​types/node](https://redirect.github.com/types/node) from 18.19.70 to 18.19.71 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3629](https://redirect.github.com/peter-evans/create-pull-request/pull/3629) - Update distribution by [@​actions-bot](https://redirect.github.com/actions-bot) in [#​3647](https://redirect.github.com/peter-evans/create-pull-request/pull/3647) - build(deps-dev): bump [@​types/node](https://redirect.github.com/types/node) from 18.19.71 to 18.19.74 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3657](https://redirect.github.com/peter-evans/create-pull-request/pull/3657) - build(deps-dev): bump [@​types/node](https://redirect.github.com/types/node) from 18.19.74 to 18.19.75 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3663](https://redirect.github.com/peter-evans/create-pull-request/pull/3663) - build(deps): bump [@​octokit/plugin-rest-endpoint-methods](https://redirect.github.com/octokit/plugin-rest-endpoint-methods) from 13.3.0 to 13.3.1 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3670](https://redirect.github.com/peter-evans/create-pull-request/pull/3670) - build(deps-dev): bump prettier from 3.4.2 to 3.5.0 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3671](https://redirect.github.com/peter-evans/create-pull-request/pull/3671) - Update distribution by [@​actions-bot](https://redirect.github.com/actions-bot) in [#​3680](https://redirect.github.com/peter-evans/create-pull-request/pull/3680) - build(deps): bump [@​octokit/request-error](https://redirect.github.com/octokit/request-error) from 6.1.6 to 6.1.7 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3685](https://redirect.github.com/peter-evans/create-pull-request/pull/3685) - build(deps): bump [@​octokit/plugin-paginate-rest](https://redirect.github.com/octokit/plugin-paginate-rest) from 11.4.0 to 11.4.1 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3688](https://redirect.github.com/peter-evans/create-pull-request/pull/3688) - build(deps): bump [@​octokit/endpoint](https://redirect.github.com/octokit/endpoint) from 10.1.2 to 10.1.3 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3700](https://redirect.github.com/peter-evans/create-pull-request/pull/3700) - Update distribution by [@​actions-bot](https://redirect.github.com/actions-bot) in [#​3691](https://redirect.github.com/peter-evans/create-pull-request/pull/3691) - build(deps-dev): bump prettier from 3.5.0 to 3.5.1 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3709](https://redirect.github.com/peter-evans/create-pull-request/pull/3709) - build(deps-dev): bump eslint-import-resolver-typescript from 3.7.0 to 3.8.1 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3710](https://redirect.github.com/peter-evans/create-pull-request/pull/3710) - build(deps): bump [@​octokit/plugin-paginate-rest](https://redirect.github.com/octokit/plugin-paginate-rest) from 11.4.1 to 11.4.2 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3713](https://redirect.github.com/peter-evans/create-pull-request/pull/3713) - build(deps-dev): bump [@​types/node](https://redirect.github.com/types/node) from 18.19.75 to 18.19.76 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3712](https://redirect.github.com/peter-evans/create-pull-request/pull/3712) - build(deps): bump [@​octokit/core](https://redirect.github.com/octokit/core) from 6.1.3 to 6.1.4 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3711](https://redirect.github.com/peter-evans/create-pull-request/pull/3711) - Update distribution by [@​actions-bot](https://redirect.github.com/actions-bot) in [#​3736](https://redirect.github.com/peter-evans/create-pull-request/pull/3736) - Use showFileAtRefBase64 to read per-commit file contents by [@​grahamc](https://redirect.github.com/grahamc) in [#​3744](https://redirect.github.com/peter-evans/create-pull-request/pull/3744) #### New Contributors - [@​ybiquitous](https://redirect.github.com/ybiquitous) made their first contribution in [#​3626](https://redirect.github.com/peter-evans/create-pull-request/pull/3626) - [@​grahamc](https://redirect.github.com/grahamc) made their first contribution in [#​3744](https://redirect.github.com/peter-evans/create-pull-request/pull/3744) **Full Changelog**: ### [`v7.0.6`](https://redirect.github.com/peter-evans/create-pull-request/releases/tag/v7.0.6): Create Pull Request v7.0.6 [Compare Source](https://redirect.github.com/peter-evans/create-pull-request/compare/v7.0.5...v7.0.6) ⚙️ Fixes an issue with commit signing where unicode characters in file paths were not preserved. #### What's Changed - build(deps-dev): bump [@​vercel/ncc](https://redirect.github.com/vercel/ncc) from 0.38.1 to 0.38.2 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3365](https://redirect.github.com/peter-evans/create-pull-request/pull/3365) - Update distribution by [@​actions-bot](https://redirect.github.com/actions-bot) in [#​3370](https://redirect.github.com/peter-evans/create-pull-request/pull/3370) - build(deps): bump [@​octokit/plugin-rest-endpoint-methods](https://redirect.github.com/octokit/plugin-rest-endpoint-methods) from 13.2.4 to 13.2.5 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3375](https://redirect.github.com/peter-evans/create-pull-request/pull/3375) - build(deps-dev): bump [@​types/node](https://redirect.github.com/types/node) from 18.19.50 to 18.19.54 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3376](https://redirect.github.com/peter-evans/create-pull-request/pull/3376) - build(deps): bump [@​octokit/plugin-paginate-rest](https://redirect.github.com/octokit/plugin-paginate-rest) from 11.3.3 to 11.3.5 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3377](https://redirect.github.com/peter-evans/create-pull-request/pull/3377) - Update distribution by [@​actions-bot](https://redirect.github.com/actions-bot) in [#​3388](https://redirect.github.com/peter-evans/create-pull-request/pull/3388) - build(deps-dev): bump [@​types/node](https://redirect.github.com/types/node) from 18.19.54 to 18.19.55 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3400](https://redirect.github.com/peter-evans/create-pull-request/pull/3400) - build(deps): bump [@​actions/core](https://redirect.github.com/actions/core) from 1.10.1 to 1.11.1 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3401](https://redirect.github.com/peter-evans/create-pull-request/pull/3401) - build(deps): bump [@​octokit/plugin-rest-endpoint-methods](https://redirect.github.com/octokit/plugin-rest-endpoint-methods) from 13.2.5 to 13.2.6 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3403](https://redirect.github.com/peter-evans/create-pull-request/pull/3403) - build(deps-dev): bump eslint-plugin-import from 2.30.0 to 2.31.0 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3402](https://redirect.github.com/peter-evans/create-pull-request/pull/3402) - build(deps): bump [@​octokit/plugin-throttling](https://redirect.github.com/octokit/plugin-throttling) from 9.3.1 to 9.3.2 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3404](https://redirect.github.com/peter-evans/create-pull-request/pull/3404) - Update distribution by [@​actions-bot](https://redirect.github.com/actions-bot) in [#​3423](https://redirect.github.com/peter-evans/create-pull-request/pull/3423) - build(deps-dev): bump typescript from 5.6.2 to 5.6.3 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3441](https://redirect.github.com/peter-evans/create-pull-request/pull/3441) - build(deps): bump undici from 6.19.8 to 6.20.1 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3442](https://redirect.github.com/peter-evans/create-pull-request/pull/3442) - Update distribution by [@​actions-bot](https://redirect.github.com/actions-bot) in [#​3451](https://redirect.github.com/peter-evans/create-pull-request/pull/3451) - build(deps-dev): bump [@​types/node](https://redirect.github.com/types/node) from 18.19.55 to 18.19.58 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3457](https://redirect.github.com/peter-evans/create-pull-request/pull/3457) - build(deps-dev): bump [@​types/jest](https://redirect.github.com/types/jest) from 29.5.13 to 29.5.14 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3462](https://redirect.github.com/peter-evans/create-pull-request/pull/3462) - build(deps-dev): bump [@​types/node](https://redirect.github.com/types/node) from 18.19.58 to 18.19.60 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3463](https://redirect.github.com/peter-evans/create-pull-request/pull/3463) - chore: don't bundle undici by [@​benmccann](https://redirect.github.com/benmccann) in [#​3475](https://redirect.github.com/peter-evans/create-pull-request/pull/3475) - Update distribution by [@​actions-bot](https://redirect.github.com/actions-bot) in [#​3478](https://redirect.github.com/peter-evans/create-pull-request/pull/3478) - chore: use node-fetch-native support for proxy env vars by [@​peter-evans](https://redirect.github.com/peter-evans) in [#​3483](https://redirect.github.com/peter-evans/create-pull-request/pull/3483) - build(deps-dev): bump [@​types/node](https://redirect.github.com/types/node) from 18.19.60 to 18.19.64 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3488](https://redirect.github.com/peter-evans/create-pull-request/pull/3488) - build(deps-dev): bump undici from 6.20.1 to 6.21.0 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3499](https://redirect.github.com/peter-evans/create-pull-request/pull/3499) - build(deps-dev): bump [@​vercel/ncc](https://redirect.github.com/vercel/ncc) from 0.38.2 to 0.38.3 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3500](https://redirect.github.com/peter-evans/create-pull-request/pull/3500) - docs: note `push-to-repo` classic PAT `workflow` scope requirement by [@​scop](https://redirect.github.com/scop) in [#​3511](https://redirect.github.com/peter-evans/create-pull-request/pull/3511) - docs: spelling fixes by [@​scop](https://redirect.github.com/scop) in [#​3512](https://redirect.github.com/peter-evans/create-pull-request/pull/3512) - build(deps-dev): bump typescript from 5.6.3 to 5.7.2 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3516](https://redirect.github.com/peter-evans/create-pull-request/pull/3516) - build(deps-dev): bump prettier from 3.3.3 to 3.4.0 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3517](https://redirect.github.com/peter-evans/create-pull-request/pull/3517) - build(deps-dev): bump [@​types/node](https://redirect.github.com/types/node) from 18.19.64 to 18.19.66 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3518](https://redirect.github.com/peter-evans/create-pull-request/pull/3518) - docs(README): clarify that an existing open PR is managed by [@​caugner](https://redirect.github.com/caugner) in [#​3498](https://redirect.github.com/peter-evans/create-pull-request/pull/3498) - Update distribution by [@​actions-bot](https://redirect.github.com/actions-bot) in [#​3529](https://redirect.github.com/peter-evans/create-pull-request/pull/3529) - build(deps): bump [@​octokit/plugin-paginate-rest](https://redirect.github.com/octokit/plugin-paginate-rest) from 11.3.5 to 11.3.6 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3542](https://redirect.github.com/peter-evans/create-pull-request/pull/3542) - build(deps-dev): bump [@​types/node](https://redirect.github.com/types/node) from 18.19.66 to 18.19.67 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3543](https://redirect.github.com/peter-evans/create-pull-request/pull/3543) - build(deps-dev): bump prettier from 3.4.0 to 3.4.1 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3544](https://redirect.github.com/peter-evans/create-pull-request/pull/3544) - build(deps-dev): bump eslint-import-resolver-typescript from 3.6.3 to 3.7.0 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3559](https://redirect.github.com/peter-evans/create-pull-request/pull/3559) - build(deps-dev): bump prettier from 3.4.1 to 3.4.2 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3560](https://redirect.github.com/peter-evans/create-pull-request/pull/3560) - build(deps-dev): bump [@​types/node](https://redirect.github.com/types/node) from 18.19.67 to 18.19.68 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3570](https://redirect.github.com/peter-evans/create-pull-request/pull/3570) - build(deps): bump p-limit from 6.1.0 to 6.2.0 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3578](https://redirect.github.com/peter-evans/create-pull-request/pull/3578) - Update distribution by [@​actions-bot](https://redirect.github.com/actions-bot) in [#​3583](https://redirect.github.com/peter-evans/create-pull-request/pull/3583) - fix: preserve unicode in filepaths when commit signing by [@​peter-evans](https://redirect.github.com/peter-evans) in [#​3588](https://redirect.github.com/peter-evans/create-pull-request/pull/3588) #### New Contributors - [@​benmccann](https://redirect.github.com/benmccann) made their first contribution in [#​3475](https://redirect.github.com/peter-evans/create-pull-request/pull/3475) - [@​scop](https://redirect.github.com/scop) made their first contribution in [#​3511](https://redirect.github.com/peter-evans/create-pull-request/pull/3511) - [@​caugner](https://redirect.github.com/caugner) made their first contribution in [#​3498](https://redirect.github.com/peter-evans/create-pull-request/pull/3498) **Full Changelog**: ### [`v7.0.5`](https://redirect.github.com/peter-evans/create-pull-request/releases/tag/v7.0.5): Create Pull Request v7.0.5 [Compare Source](https://redirect.github.com/peter-evans/create-pull-request/compare/v7.0.4...v7.0.5) ⚙️ Fixes an issue with commit signing to allow it to support symlinks #### What's Changed - fix: support symlinks when commit signing by [@​peter-evans](https://redirect.github.com/peter-evans) in [#​3359](https://redirect.github.com/peter-evans/create-pull-request/pull/3359) **Full Changelog**: ### [`v7.0.4`](https://redirect.github.com/peter-evans/create-pull-request/releases/tag/v7.0.4): Create Pull Request v7.0.4 [Compare Source](https://redirect.github.com/peter-evans/create-pull-request/compare/v7.0.3...v7.0.4) ⚙️ Fixes an issue with commit signing to allow it to support submodules #### What's Changed - docs: correct suggestion for bot setup by [@​henryiii](https://redirect.github.com/henryiii) in [#​3342](https://redirect.github.com/peter-evans/create-pull-request/pull/3342) - build(deps-dev): bump [@​types/jest](https://redirect.github.com/types/jest) from 29.5.12 to 29.5.13 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3343](https://redirect.github.com/peter-evans/create-pull-request/pull/3343) - build(deps-dev): bump eslint from 8.57.0 to 8.57.1 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3344](https://redirect.github.com/peter-evans/create-pull-request/pull/3344) - fix: support submodules when commit signing by [@​peter-evans](https://redirect.github.com/peter-evans) in [#​3354](https://redirect.github.com/peter-evans/create-pull-request/pull/3354) #### New Contributors - [@​henryiii](https://redirect.github.com/henryiii) made their first contribution in [#​3342](https://redirect.github.com/peter-evans/create-pull-request/pull/3342) **Full Changelog**: ### [`v7.0.3`](https://redirect.github.com/peter-evans/create-pull-request/releases/tag/v7.0.3): Create Pull Request v7.0.3 [Compare Source](https://redirect.github.com/peter-evans/create-pull-request/compare/v7.0.2...v7.0.3) ⚙️ Fixes an issue with commit signing where commit SHAs have variable lengths when abbreviated. #### What's Changed - fix: disable abbreviated commit shas in diff by [@​peter-evans](https://redirect.github.com/peter-evans) in [#​3337](https://redirect.github.com/peter-evans/create-pull-request/pull/3337) **Full Changelog**: ### [`v7.0.2`](https://redirect.github.com/peter-evans/create-pull-request/releases/tag/v7.0.2): Create Pull Request v7.0.2 [Compare Source](https://redirect.github.com/peter-evans/create-pull-request/compare/v7.0.1...v7.0.2) ⚙️ Fixes an issue with commit signing when a change was detected as being a rename or copy. #### What's Changed - build(deps-dev): bump [@​types/node](https://redirect.github.com/types/node) from 18.19.48 to 18.19.50 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3320](https://redirect.github.com/peter-evans/create-pull-request/pull/3320) - build(deps-dev): bump typescript from 5.5.4 to 5.6.2 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3319](https://redirect.github.com/peter-evans/create-pull-request/pull/3319) - fix: disable diff detection for renames and copies by [@​peter-evans](https://redirect.github.com/peter-evans) in [#​3330](https://redirect.github.com/peter-evans/create-pull-request/pull/3330) **Full Changelog**: ### [`v7.0.1`](https://redirect.github.com/peter-evans/create-pull-request/releases/tag/v7.0.1): Create Pull Request v7.0.1 [Compare Source](https://redirect.github.com/peter-evans/create-pull-request/compare/v7...v7.0.1) ⚙️ Fixes [an issue](https://redirect.github.com/peter-evans/create-pull-request/issues/3311) affecting one particular use case where the action fails on `diff --stat` with `fatal: ambiguous argument`. #### What's Changed - build(deps): bump peter-evans/create-pull-request from 6 to 7 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3283](https://redirect.github.com/peter-evans/create-pull-request/pull/3283) - build(deps-dev): bump [@​types/node](https://redirect.github.com/types/node) from 18.19.46 to 18.19.48 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3288](https://redirect.github.com/peter-evans/create-pull-request/pull/3288) - build(deps-dev): bump [@​typescript-eslint/parser](https://redirect.github.com/typescript-eslint/parser) from 7.17.0 to 7.18.0 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3289](https://redirect.github.com/peter-evans/create-pull-request/pull/3289) - build(deps-dev): bump eslint-plugin-import from 2.29.1 to 2.30.0 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3290](https://redirect.github.com/peter-evans/create-pull-request/pull/3290) - build(deps-dev): bump [@​typescript-eslint/eslint-plugin](https://redirect.github.com/typescript-eslint/eslint-plugin) from 7.17.0 to 7.18.0 by [@​dependabot](https://redirect.github.com/dependabot) in [#​3291](https://redirect.github.com/peter-evans/create-pull-request/pull/3291) - fix: handle ambiguous argument failure on diff stat by [@​peter-evans](https://redirect.github.com/peter-evans) in [#​3312](https://redirect.github.com/peter-evans/create-pull-request/pull/3312) **Full Changelog**:
## Why? Automated dependency update via Renovate. --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://redirect.github.com/renovatebot/renovate). --- .github/workflows/sync-go-nixpkgs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sync-go-nixpkgs.yml b/.github/workflows/sync-go-nixpkgs.yml index 312fdf5..cac4063 100644 --- a/.github/workflows/sync-go-nixpkgs.yml +++ b/.github/workflows/sync-go-nixpkgs.yml @@ -67,7 +67,7 @@ jobs: - name: Open PR if: steps.bump.outputs.changed == 'true' - uses: peter-evans/create-pull-request@v7 + uses: peter-evans/create-pull-request@v8 with: token: ${{ secrets.HOMEBREW_GITHUB_TOKEN }} committer: "Floatpane Bot " From 294bed4ee2175dfdfc2403ba7ce20812a39f3e5f Mon Sep 17 00:00:00 2001 From: nanookclaw Date: Sun, 17 May 2026 19:19:51 +0000 Subject: [PATCH 4/6] fix: skip TZID for date-only events (#1301) ## What? `parseEventTimestamp` now detects date-only iCalendar values (`VALUE=DATE` or bare `YYYYMMDD`) and skips TZID re-anchoring for them. Timed DTSTART/DTEND values with TZID keep the existing timezone behavior. ## Why? Closes #1058. RFC 5545 DATE values have no timezone. Ignoring TZID for all-day events prevents a stray TZID parameter from shifting the displayed date. --- calendar/calendar.go | 13 +++++- calendar/calendar_test.go | 85 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 2 deletions(-) diff --git a/calendar/calendar.go b/calendar/calendar.go index c3d27c0..1a02dea 100644 --- a/calendar/calendar.go +++ b/calendar/calendar.go @@ -147,10 +147,18 @@ func parseEventTimestamp(vevent *ics.VEvent, prop ics.ComponentProperty) (time.T value := p.Value var tzid string + var isDateOnly bool if params := p.ICalParameters; params != nil { if tzids := params["TZID"]; len(tzids) > 0 { tzid = tzids[0] } + if vals := params["VALUE"]; len(vals) > 0 && strings.EqualFold(vals[0], "DATE") { + isDateOnly = true + } + } + // RFC 5545 DATE form is YYYYMMDD (8 chars, no time component). + if !isDateOnly && len(value) == 8 { + isDateOnly = true } // Try parsing with timezone @@ -176,8 +184,9 @@ func parseEventTimestamp(vevent *ics.VEvent, prop ics.ComponentProperty) (time.T return time.Time{}, fmt.Errorf("parse timestamp: %w", err) } - // Apply timezone if specified - if tzid != "" && !strings.HasSuffix(value, "Z") { + // Apply timezone if specified. RFC 5545: VALUE=DATE has no timezone, so + // TZID must be ignored for date-only values even when present. + if tzid != "" && !strings.HasSuffix(value, "Z") && !isDateOnly { if loc, locErr := time.LoadLocation(tzid); locErr == nil { t = time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second(), t.Nanosecond(), loc) } diff --git a/calendar/calendar_test.go b/calendar/calendar_test.go index 4d7da3e..71554df 100644 --- a/calendar/calendar_test.go +++ b/calendar/calendar_test.go @@ -129,6 +129,91 @@ func TestGenerateRSVP(t *testing.T) { } } +// buildICS wraps DTSTART/DTEND lines into a minimal VCALENDAR for ParseICS. +func buildICS(dtstart, dtend string) []byte { + return []byte("BEGIN:VCALENDAR\r\n" + + "VERSION:2.0\r\n" + + "PRODID:-//Test//Test//EN\r\n" + + "BEGIN:VEVENT\r\n" + + "UID:date-only@example.com\r\n" + + "DTSTAMP:20260415T120000Z\r\n" + + dtstart + "\r\n" + + dtend + "\r\n" + + "SUMMARY:Test\r\n" + + "END:VEVENT\r\n" + + "END:VCALENDAR\r\n") +} + +func TestParseICS_DateOnly(t *testing.T) { + wantStart := time.Date(2026, 4, 21, 0, 0, 0, 0, time.UTC) + wantEnd := time.Date(2026, 4, 22, 0, 0, 0, 0, time.UTC) + + tests := []struct { + name string + dtstart string + dtend string + }{ + { + name: "VALUE=DATE without TZID", + dtstart: "DTSTART;VALUE=DATE:20260421", + dtend: "DTEND;VALUE=DATE:20260422", + }, + { + // Regression: TZID present on a date-only value must be ignored + // (RFC 5545 forbids TZID with VALUE=DATE; some producers emit it anyway). + name: "VALUE=DATE with TZID is ignored", + dtstart: "DTSTART;TZID=America/New_York;VALUE=DATE:20260421", + dtend: "DTEND;TZID=America/New_York;VALUE=DATE:20260422", + }, + { + // Shape-only detection: no VALUE param, but YYYYMMDD value with TZID. + name: "YYYYMMDD shape with TZID is treated as date-only", + dtstart: "DTSTART;TZID=America/Los_Angeles:20260421", + dtend: "DTEND;TZID=America/Los_Angeles:20260422", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + event, err := ParseICS(buildICS(tt.dtstart, tt.dtend)) + if err != nil { + t.Fatalf("ParseICS failed: %v", err) + } + if !event.Start.Equal(wantStart) { + t.Errorf("Start = %v, want %v", event.Start.UTC(), wantStart) + } + if !event.End.Equal(wantEnd) { + t.Errorf("End = %v, want %v", event.End.UTC(), wantEnd) + } + }) + } +} + +func TestParseICS_TimedWithTZID(t *testing.T) { + // Existing behavior: timed values with TZID keep their zone semantics. + event, err := ParseICS(buildICS( + "DTSTART;TZID=America/New_York:20260421T140000", + "DTEND;TZID=America/New_York:20260421T153000", + )) + if err != nil { + t.Fatalf("ParseICS failed: %v", err) + } + + loc, err := time.LoadLocation("America/New_York") + if err != nil { + t.Skipf("America/New_York unavailable on this system: %v", err) + } + wantStart := time.Date(2026, 4, 21, 14, 0, 0, 0, loc) + wantEnd := time.Date(2026, 4, 21, 15, 30, 0, 0, loc) + + if !event.Start.Equal(wantStart) { + t.Errorf("Start = %v, want %v", event.Start, wantStart) + } + if !event.End.Equal(wantEnd) { + t.Errorf("End = %v, want %v", event.End, wantEnd) + } +} + func TestExtractEmail(t *testing.T) { tests := []struct { input string From dcc23c927ba1ae43c0c83d92b1d3b15f2e68d54a Mon Sep 17 00:00:00 2001 From: Drew Smirnoff Date: Sun, 17 May 2026 23:39:33 +0400 Subject: [PATCH 5/6] ci: nix toolchain --- .github/workflows/nixpkgs-bump.yml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nixpkgs-bump.yml b/.github/workflows/nixpkgs-bump.yml index 44b8c05..473df93 100644 --- a/.github/workflows/nixpkgs-bump.yml +++ b/.github/workflows/nixpkgs-bump.yml @@ -29,6 +29,11 @@ jobs: extra_nix_config: | experimental-features = nix-command flakes + - name: Checkout matcha (source of truth for package.nix) + uses: actions/checkout@v6 + with: + path: matcha + - name: Checkout nixpkgs fork uses: actions/checkout@v6 with: @@ -63,12 +68,16 @@ jobs: git checkout -b "$BRANCH" echo "BRANCH=$BRANCH" >> $GITHUB_ENV - - name: Bump version and reset hashes + - name: Sync package.nix from matcha repo and bump version working-directory: nixpkgs run: | PKG=pkgs/by-name/ma/matcha/package.nix NEW="${{ inputs.version }}" + # Overwrite nixpkgs package.nix with matcha repo's template. + # Template is source of truth; nixpkgs PR mirrors it. + cp ../matcha/nix/nixpkgs-package.nix "$PKG" sed -i -E "s/(version\s*=\s*\")[^\"]+(\")/\1$NEW\2/" "$PKG" + # Hashes already fakeHash in template; explicit reset for safety. sed -i -E 's|hash = "sha256-[A-Za-z0-9+/=]+"|hash = lib.fakeHash|' "$PKG" sed -i -E 's|vendorHash = "sha256-[A-Za-z0-9+/=]+"|vendorHash = lib.fakeHash|' "$PKG" @@ -125,7 +134,7 @@ jobs: - Built on \`x86_64-linux\` via GitHub Actions - Hashes regenerated from upstream tarball - - No package metadata changes beyond version + hashes + - \`package.nix\` synced from upstream matcha repo (\`nix/nixpkgs-package.nix\`) cc maintainer for review. EOF From 37803bf0a211b9d969e06625a344a058e0a0d08c Mon Sep 17 00:00:00 2001 From: Drew Smirnoff Date: Sun, 17 May 2026 23:40:18 +0400 Subject: [PATCH 6/6] Modify toolchain in go.mod for Nixpkgs compatibility Update Go toolchain in go.mod to use Nixpkgs Go version. --- nix/nixpkgs-package.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/nix/nixpkgs-package.nix b/nix/nixpkgs-package.nix index dd9b47c..28fa0cf 100644 --- a/nix/nixpkgs-package.nix +++ b/nix/nixpkgs-package.nix @@ -2,6 +2,7 @@ lib, buildGoModule, fetchFromGitHub, + go, pkg-config, pcsclite, stdenv, @@ -26,6 +27,12 @@ buildGoModule (finalAttrs: { vendorHash = lib.fakeHash; proxyVendor = true; + # Upstream pins `toolchain` to latest Go for dev builds (GOTOOLCHAIN=auto). + # Nix sandbox sets GOTOOLCHAIN=local and can't download — rewrite to nixpkgs Go. + postPatch = '' + sed -i -E "s/^toolchain go[0-9.]+$/toolchain go${go.version}/" go.mod + ''; + nativeBuildInputs = lib.optionals stdenv.hostPlatform.isLinux [ pkg-config ];