2101 Commits

Author SHA1 Message Date
dependabot[bot]
76ca29c582
chore(deps): bump github/codeql-action from 4.31.2 to 4.31.6
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.2 to 4.31.6.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](0499de31b9...fe4161a26a)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 4.31.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-02 01:17:48 +00:00
Tamer Fahmy
8255c26637
fix: Fix version check against latest release (#3292)
Signed-off-by: Tamer Fahmy <tamer.fahmy@gmail.com>
2025-11-25 19:15:24 +01:00
Dominik Schulz
c298653239
Tag v1.16.0 (#3289)
Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
v1.16.0
2025-11-13 19:07:22 +01:00
Dominik Schulz
423333dbee
fix: Fix release helper and update capabilities for caplos (#3288)
Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-11-12 22:39:13 +01:00
Dominik Schulz
71861e4a8b
chore: Update golangci-lint (#3287)
Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-11-12 21:09:26 +01:00
Dominik Schulz
792f8b07e2
[chore] Initial fixes and added a warning for CryptFS and JJFS (#3270)
These backends are not ready, yet.

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-11-12 21:04:55 +01:00
dependabot[bot]
49d0c43b59
chore(deps): bump sigstore/cosign-installer from 3.10.0 to 4.0.0 (#3283)
Bumps [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) from 3.10.0 to 4.0.0.
- [Release notes](https://github.com/sigstore/cosign-installer/releases)
- [Commits](d7543c93d8...faadad0cce)

---
updated-dependencies:
- dependency-name: sigstore/cosign-installer
  dependency-version: 4.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-12 20:46:13 +01:00
dependabot[bot]
3f27c13b6b
chore(deps): bump anchore/scan-action from 7.0.0 to 7.1.0 (#3280)
Bumps [anchore/scan-action](https://github.com/anchore/scan-action) from 7.0.0 to 7.1.0.
- [Release notes](https://github.com/anchore/scan-action/releases)
- [Changelog](https://github.com/anchore/scan-action/blob/main/RELEASE.md)
- [Commits](f6601287cd...568b89d27f)

---
updated-dependencies:
- dependency-name: anchore/scan-action
  dependency-version: 7.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-12 20:39:47 +01:00
dependabot[bot]
2e4556cedc
chore(deps): bump actions/upload-artifact from 4.6.2 to 5.0.0 (#3281)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.6.2 to 5.0.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](ea165f8d65...330a01c490)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-12 20:39:32 +01:00
dependabot[bot]
e46a6ccac1
chore(deps): bump github/codeql-action from 3.30.5 to 4.31.2 (#3282)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.30.5 to 4.31.2.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](3599b3baa1...0499de31b9)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 4.31.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-12 20:39:22 +01:00
Dominik Schulz
f84e676ec1
Improve logging and pretty printing (#3286)
* [chore] Add PID to the debug logs

This helps differentiate between gopass foreground and background (e.g.
agent) processes.

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* [chore] Adjust logging severities and improve pretty printing

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

---------

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-11-12 20:37:52 +01:00
dependabot[bot]
a7c40504cc
chore(deps): bump anchore/sbom-action from 0.20.6 to 0.20.9 (#3284)
Bumps [anchore/sbom-action](https://github.com/anchore/sbom-action) from 0.20.6 to 0.20.9.
- [Release notes](https://github.com/anchore/sbom-action/releases)
- [Changelog](https://github.com/anchore/sbom-action/blob/main/RELEASE.md)
- [Commits](f8bdd1d8ac...8e94d75ddd)

---
updated-dependencies:
- dependency-name: anchore/sbom-action
  dependency-version: 0.20.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-12 20:37:44 +01:00
AnomalRoil
ed54973318
Fixing GPG ID related issues (#3275)
* Adding regression test

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>

* fixing recipient logic to honor subkeys

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>

* Revert "Adding regression test"

This reverts commit fcb85c9d2ee4ce3b1d53f934338c6a33e18d7d9d.

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>

* adding comment about noop

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>

* Linting

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>

* Addressing review comments

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>

* avoid noise debug logs

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>

---------

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>
2025-10-08 15:14:19 +02:00
Dominik Schulz
0a10134d40
[chore] Logging improvements (#3273)
Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-10-06 11:59:20 +02:00
Dominik Schulz
a5a03a72d0
[fix] Drop Go 1.23 (#3274)
Some tools require at least 1.24.

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-10-05 22:07:23 +02:00
sarff
b10b940aac
x3 optimization for hash (#3269)
* [fix] Fix version check (#3268)

Previously `gopass version` would always print an upgrade notice
when build from source even if there were no newer releases.

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
Signed-off-by: dmit <exehoua@gmail.com>

* x3 optimization for hash

Signed-off-by: dmit <exehoua@gmail.com>

* signed-off

Signed-off-by: dmit <exehoua@gmail.com>

---------

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
Signed-off-by: dmit <exehoua@gmail.com>
Co-authored-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-10-05 20:16:33 +02:00
dependabot[bot]
a493fad6a1
chore(deps): bump actions/setup-go from 5.5.0 to 6.0.0 (#3262)
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 5.5.0 to 6.0.0.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](d35c59abb0...4469467582)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-version: 6.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-05 20:03:26 +02:00
Dominik Schulz
678e1f3cb9
[chore] Run linux builds with multiple Go versions (#3272)
We want to be able to build using the latest Go version, the one that
most large distros ship (e.g. right now that is 1.24) and possibly older
versions.

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-10-05 19:24:15 +02:00
Dominik Schulz
fd18b2dc50
[fix] Fix version check (#3268)
Previously `gopass version` would always print an upgrade notice
when build from source even if there were no newer releases.

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-10-05 13:48:02 +02:00
Dominik Schulz
8940e95657
[fix] Fix clipboard issues (#3267)
This commit pulls in fixes from gopasspw/clipboard.

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-10-05 12:34:47 +02:00
Dominik Schulz
9d905ecd65
[chore] Add capability and vulnerability checks (#3266)
This commit adds capslock and govulncheck to help us identify
vulnerabilities and possible supply chain attacks through added
capacilities in dependencies. The signal for this repop is low since
we have to rely on a large number of direct filesystem access
and subprocess executions but it seems worth a try.

Fixes #3254

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-10-05 12:34:35 +02:00
dependabot[bot]
1678788b9c
chore(deps): bump sigstore/cosign-installer from 3.9.2 to 3.10.0 (#3255)
Bumps [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) from 3.9.2 to 3.10.0.
- [Release notes](https://github.com/sigstore/cosign-installer/releases)
- [Commits](d58896d6a1...d7543c93d8)

---
updated-dependencies:
- dependency-name: sigstore/cosign-installer
  dependency-version: 3.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-02 13:05:03 +02:00
dependabot[bot]
0ce8f71139
chore(deps): bump step-security/harden-runner from 2.13.0 to 2.13.1 (#3256)
Bumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.13.0 to 2.13.1.
- [Release notes](https://github.com/step-security/harden-runner/releases)
- [Commits](ec9f2d5744...f4a75cfd61)

---
updated-dependencies:
- dependency-name: step-security/harden-runner
  dependency-version: 2.13.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-02 09:24:41 +02:00
dependabot[bot]
34a704a823
chore(deps): bump anchore/sbom-action from 0.20.5 to 0.20.6 (#3258)
Bumps [anchore/sbom-action](https://github.com/anchore/sbom-action) from 0.20.5 to 0.20.6.
- [Release notes](https://github.com/anchore/sbom-action/releases)
- [Changelog](https://github.com/anchore/sbom-action/blob/main/RELEASE.md)
- [Commits](da167eac91...f8bdd1d8ac)

---
updated-dependencies:
- dependency-name: anchore/sbom-action
  dependency-version: 0.20.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-02 09:24:32 +02:00
dependabot[bot]
4330e3c36d
chore(deps): bump docker/login-action from 3.5.0 to 3.6.0 (#3260)
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.5.0 to 3.6.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](184bdaa072...5e57cd1181)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 3.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-02 09:22:04 +02:00
dependabot[bot]
720b90fd36
chore(deps): bump msys2/setup-msys2 from 2.28.0 to 2.29.0 (#3257)
Bumps [msys2/setup-msys2](https://github.com/msys2/setup-msys2) from 2.28.0 to 2.29.0.
- [Release notes](https://github.com/msys2/setup-msys2/releases)
- [Changelog](https://github.com/msys2/setup-msys2/blob/main/CHANGELOG.md)
- [Commits](40677d36a5...fb197b72ce)

---
updated-dependencies:
- dependency-name: msys2/setup-msys2
  dependency-version: 2.29.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-02 09:21:51 +02:00
dependabot[bot]
f439f8cdfc
chore(deps): bump ossf/scorecard-action from 2.4.2 to 2.4.3 (#3259)
Bumps [ossf/scorecard-action](https://github.com/ossf/scorecard-action) from 2.4.2 to 2.4.3.
- [Release notes](https://github.com/ossf/scorecard-action/releases)
- [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md)
- [Commits](05b42c6244...4eaacf0543)

---
updated-dependencies:
- dependency-name: ossf/scorecard-action
  dependency-version: 2.4.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-02 09:21:40 +02:00
dependabot[bot]
39cff7ecb9
chore(deps): bump github/codeql-action from 3.30.0 to 3.30.5 (#3261)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.30.0 to 3.30.5.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](2d92b76c45...3599b3baa1)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 3.30.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-02 09:21:30 +02:00
dependabot[bot]
637e9b1852
chore(deps): bump anchore/scan-action from 6.5.1 to 7.0.0 (#3264)
Bumps [anchore/scan-action](https://github.com/anchore/scan-action) from 6.5.1 to 7.0.0.
- [Release notes](https://github.com/anchore/scan-action/releases)
- [Changelog](https://github.com/anchore/scan-action/blob/main/RELEASE.md)
- [Commits](1638637db6...f6601287cd)

---
updated-dependencies:
- dependency-name: anchore/scan-action
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-02 09:21:18 +02:00
dependabot[bot]
dcfc3dc31f
chore(deps): bump actions/cache from 4.2.4 to 4.3.0 (#3263)
Bumps [actions/cache](https://github.com/actions/cache) from 4.2.4 to 4.3.0.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](0400d5f644...0057852bfa)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: 4.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-02 09:21:06 +02:00
google-labs-jules[bot]
882d06e001
feat: Add cryptfs storage backend for filename encryption (#3249)
* feat: Add cryptfs storage backend for filename encryption

This commit introduces a new storage backend called `cryptfs`. This backend encrypts the filenames of secrets to enhance privacy while maintaining compatibility with existing VCS backends like Git.

Key features:
- For each secret, a cryptographically secure hash (SHA-256) of its name is generated and used as the filename for the underlying storage.
- A mapping from the original secret name to the hashed filename is maintained in an encrypted file (`.gopass-mapping.age`) within the repository.
- The mapping file is encrypted using the `age` encryption backend, with recipients read from the store's `.age-recipients` file.
- The `cryptfs` backend is implemented as a wrapper around any existing storage backend (e.g., `gitfs`, `fs`), which can be configured by the user.
- The backend is registered with gopass and can be enabled by setting `storage: cryptfs` in the store's configuration.

This implementation addresses issue #2634.

* [fix] Fix lint errors

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* [chore] Fix the remaining tests and add some docs.

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

---------

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-09-24 08:47:09 +02:00
google-labs-jules[bot]
86720090b6
docs: Add GoDoc to pkg and improve markdown files (#3251)
This change adds GoDoc comments to many of the public symbols in the
`pkg/` directory. It also includes various improvements to the
documentation in `README.md` and other markdown files in the `docs/`
directory.

This is a partial documentation effort, as requested by the user, to
get a pull request submitted quickly.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-09-22 19:37:15 +02:00
google-labs-jules[bot]
c0f278095a
feat: Clone remote on init (#3247)
* feat: Clone remote on init

When a remote is provided to the init command, try to clone it first.
If the cloned repository is not empty, use it as the password store.
Otherwise, initialize a new password store.

* feat: Clone remote on setup

When a remote is provided to the setup command, try to clone it first.
If the cloned repository is not empty, use it as the password store.
Otherwise, initialize a new password store.

* [fix] Remove init during clone

When we clone a repo we never want to initialize it automatically.

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

---------

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-09-22 18:21:16 +02:00
google-labs-jules[bot]
57db06bd94
Add regression test for issue #2571 (#3250)
* feat: Add regression test for issue #2571

This commit adds a regression test for issue #2571. The issue describes a scenario where `gopass sync` incorrectly removes public keys for sub-stores under certain conditions.

The new integration test in `tests/sync_test.go` reproduces the steps outlined in the GitHub issue to ensure that the public key is not deleted after running `gopass sync`.

* [fix] Fix lint errors

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

---------

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-09-22 17:55:19 +02:00
google-labs-jules[bot]
8c60b17c24
feat(age): Add unlock command to age agent (#3244)
* feat(age): Add unlock command to age agent

This change introduces a proper lock/unlock mechanism for the age agent.

The issue was that after locking the agent with `gopass age lock`, there was no way to unlock it without restarting the agent. This made the lock command mostly useless.

This change introduces a new `unlock` command for the agent and a `locked` state.

- The `lock` command now sets a `locked` flag to `true` in addition to clearing identities.
- The `decrypt` function in the agent now checks this `locked` flag and returns an error if the agent is locked.
- When the gopass client receives the "agent is locked" error, it will ask the user for their passphrase, reload the identities, and send them to the agent.
- A new `gopass age agent unlock` CLI command is added to trigger this new functionality.
- The `gopass age agent status` command is enhanced to report whether the agent is locked.
- The old top-level `gopass age lock` command is hidden, and a new `gopass age agent lock` command is introduced for consistency.

Fixes #3242

* feat(age): Add unlock command to age agent

This change introduces a proper lock/unlock mechanism for the age agent.

The issue was that after locking the agent with `gopass age lock`, there was no way to unlock it without restarting the agent. This made the lock command mostly useless.

This change introduces a new `unlock` command for the agent and a `locked` state.

- The `lock` command now sets a `locked` flag to `true` in addition to clearing identities.
- The `decrypt` function in the agent now checks this `locked` flag and returns an error if the agent is locked.
- When the gopass client receives the "agent is locked" error, it will ask the user for their passphrase, reload the identities, and send them to the agent.
- A new `gopass age agent unlock` CLI command is added to trigger this new functionality.
- The `gopass age agent status` command is enhanced to report whether the agent is locked.
- The old top-level `gopass age lock` command is hidden, and a new `gopass age agent lock` command is introduced for consistency.

I have also addressed the PR comment about the import alias. I have removed the alias and used a dot import instead to avoid the name collision.

Fixes #3242

* feat(age): Add unlock command to age agent

This change introduces a proper lock/unlock mechanism for the age agent.

The issue was that after locking the agent with `gopass age lock`, there was no way to unlock it without restarting the agent. This made the lock command mostly useless.

This change introduces a new `unlock` command for the agent and a `locked` state.

- The `lock` command now sets a `locked` flag to `true` in addition to clearing identities.
- The `decrypt` function in the agent now checks this `locked` flag and returns an error if the agent is locked.
- When the gopass client receives the "agent is locked" error, it will ask the user for their passphrase, reload the identities, and send them to the agent.
- A new `gopass age agent unlock` CLI command is added to trigger this new functionality.
- The `gopass age agent status` command is enhanced to report whether the agent is locked.
- The old top-level `gopass age lock` command is hidden, and a new `gopass age agent lock` command is introduced for consistency.

To avoid name collisions with the imported `filippo.io/age` package, the local `age` package has been renamed to `agecrypto`.

Fixes #3242

* feat(age): Add auto-lock feature to age agent

This change introduces an auto-lock feature for the age agent. The agent will now automatically lock itself after a configurable period of inactivity.

This change also includes the initial fix for issue #3242, which introduced a proper lock/unlock mechanism for the age agent.

- A new config option `age.agent-timeout` is added to specify the inactivity timeout in seconds.
- The agent now has a timer that is reset on every successful decryption operation.
- If the timer expires, the agent locks itself.
- A new `set-timeout` command is added to the agent protocol to configure the timeout.
- The gopass client sends the timeout to the agent when it starts or when it unlocks the agent.
- A new test `TestAgentAutoLock` is added to verify the new functionality.

To avoid name collisions with the imported `filippo.io/age` package, the local `age` package has been renamed to `agecrypto`.

Fixes #3242

* [fix] Fix lint issues

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

---------

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-09-20 17:09:12 +02:00
Dominik Schulz
dbb77d6e54
[fix] Correctly handle IsGitCommit false in store.Move (#3246)
The move implementation would always try to commit, even if the caller
did set this to false.

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-09-20 17:08:27 +02:00
google-labs-jules[bot]
909a46f2a3
[BUGFIX] reorg: List all secrets instead of just top-level folders (#3245)
The reorg command was only listing top-level folders, which made it
difficult to move secrets in bulk. This change modifies the reorg
command to list all secrets recursively, one per line, with their full
name. This is achieved by changing the maxDepth parameter of the
Store.List call to -1, which signifies an infinite depth.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-09-19 21:08:45 +02:00
Dominik Schulz
02ccdf847b
Tag v1.15.18 (#3241)
Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
v1.15.18
2025-09-19 18:49:07 +02:00
Dominik Schulz
cc97921794
Improve release helpers (#3240)
* [chore] Clean up release helpers

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* [chore] Add GOPASS_NOUPGRADE variable to the release helper

To avoid runing `make upgrade` during a release.

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

---------

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-09-19 18:31:48 +02:00
google-labs-jules[bot]
08f3bf9f13
feat: Improve usability of 'gopass mounts add' command (#3238)
This change improves the usability of the `gopass mounts add` command by making the `alias` argument optional.

If the `alias` is not provided, it is automatically derived from the base name of the provided path. This makes the command more intuitive to use, as users can now simply provide the path to the store they want to mount.

The help text for the command has also been updated to reflect this new usage pattern.

Fixes #2952

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-09-19 17:33:04 +02:00
Dominik Schulz
c18c862a31
[fix] Enable Windows builders (#3237)
Fixes #3205

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-09-19 16:58:29 +02:00
Dominik Schulz
a4dd48529e
[fix] Update gitconfig to v0.0.3 to pull in Windows fixes (#3236)
This disables path unescaping on Windows.

Fixes #3225

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-09-19 16:39:52 +02:00
Dominik Schulz
5c812df139
[fix] Fix recipient check error (#3235)
When using `gopass edit` with the fuzzy match feature the recipients
check might incorrectly target the root store when the actual secret
would be in a mount (and might have correct recpients).

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-09-19 11:29:27 +02:00
google-labs-jules[bot]
7a5d4e9c5f
feat: Add reorg command (#3232)
* feat: add reorg command for bulk secret reorganization

This commit introduces the `gopass reorg` command, which allows for bulk reorganization of secrets within a password store.

The command works by listing secrets in a temporary file, which the user can then edit in their default editor. After the editor is closed, gopass calculates the necessary moves, shows a diff for confirmation, and then executes the moves as a single commit.

This feature addresses issue #1866, providing a more efficient way to manage large password stores.

* feat: add reorg command for bulk secret reorganization

This commit introduces the `gopass reorg` command, which allows for bulk reorganization of secrets within a password store.

The command works by listing secrets in a temporary file, which the user can then edit in their default editor. After the editor is closed, gopass calculates the necessary moves, shows a diff for confirmation, and then executes the moves as a single commit.

This feature addresses issue #1866, providing a more efficient way to manage large password stores.

* feat: add reorg command for bulk secret reorganization

This commit introduces the `gopass reorg` command, which allows for bulk reorganization of secrets within a password store.

The command works by listing secrets in a temporary file, which the user can then edit in their default editor. After the editor is closed, gopass calculates the necessary moves, shows a diff for confirmation, and then executes the moves as a single commit.

This feature addresses issue #1866, providing a more efficient way to manage large password stores.

* feat: add reorg command for bulk secret reorganization

This commit introduces the `gopass reorg` command, which allows for bulk reorganization of secrets within a password store.

The command works by listing secrets in a temporary file, which the user can then edit in their default editor. After the editor is closed, gopass calculates the necessary moves, shows a diff for confirmation, and then executes the moves as a single commit.

This feature addresses issue #1866, providing a more efficient way to manage large password stores.

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-09-19 11:29:10 +02:00
google-labs-jules[bot]
01bc3cde22
fix(gpg): Opportunistic key comparison on import (#3230)
* fix(gpg): Opportunistic key comparison on import

When importing keys gopass was already checking if the key was already present.
However, GPG is very flexible in which kind of key IDs it accepts. So it could happen that gopass would ask to import a key that is already present in the keyring, but referenced by a different ID.

This change makes the check more robust by checking the key's fingerprint before asking for import. If a key with the same fingerprint is already present, the import is skipped.

* fix(gpg): Opportunistic key comparison on import

When importing keys gopass was already checking if the key was already present.
However, GPG is very flexible in which kind of key IDs it accepts. So it could happen that gopass would ask to import a key that is already present in the keyring, but referenced by a different ID.

This change makes the check more robust by checking the key's fingerprint before asking for import. If a key with the same fingerprint is already present, the import is skipped.

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-09-19 10:54:20 +02:00
Daniel Lublin
8522d7d677
Revert "[fix] use WritePassword for secure write (#3200)" (#3234)
This reverts commit a828cada8f19e946d7db785dd0abfd74caf06a82.

The change of mime-type (away from text/plain) of the clipped text that
this causes is problematic, and is not yet supported everywhere. A
change like this needs to be tested more thoroughly. See:
https://github.com/gopasspw/gopass/issues/3233

Signed-off-by: Daniel Lublin <daniel@lublin.se>
2025-09-19 09:35:53 +02:00
google-labs-jules[bot]
ed9d0799d2
feat: Allow to customize commit messages (#3231)
* feat: Allow to customize commit messages

This change introduces the ability for users to customize the commit
message when performing actions that modify the secret store.

It adds two new flags to the `edit`, `insert`, `generate`, `copy`,
`move`, and `delete` commands:
- `--commit-message` (`-m`): to specify the commit message directly.
- `--interactive-commit` (`-i`): to open an editor for the commit
  message.

The default behavior of using a pre-defined commit message is
preserved.

* fix: Use correct commit message from context

This change fixes a bug where the commit message from the context was
not being used correctly in the `delete` function.

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-09-19 09:30:19 +02:00
google-labs-jules[bot]
5f61510ab7
docs: Add note about pass compatibility (#3229)
gopass is in fact compatible with pass (aka password-store.org)
and can be used as a drop-in replacement.

This commit adds a note about this to the README, the FAQ, and
the setup documentation. It also explains some of the differences
in features.

Fixes #3195

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-09-17 21:52:40 +02:00
google-labs-jules[bot]
9f0bfdd45f
fix(config): Make core.exportkeys handling consistent (#3228)
The handling of the `core.exportkeys` configuration setting was
inconsistent across the application.

In `internal/store/leaf/recipients.go`, the value was read using
`config.AsBoolWithDefault(..., true)`. This was introduced as a fix
for #2848 to ensure that public keys were exported by default, even
in substores.

However, other parts of the code, such as `internal/action/sync.go`,
used `config.AsBool(...)`. This resulted in different behaviors
depending on the gopass command being executed. For a substore without
the `core.exportkeys` key explicitly set, modifying recipients would
default to `true`, while a `gopass sync` would default to `false`.

This inconsistency is the likely cause of the user's report in issue
#3227 about the default value changing.

This change harmonizes the behavior by using `config.AsBool` in
`recipients.go`, making it consistent with the rest of the codebase
and the recommendation in AGENTS.md to use the `config.Bool` helper
(which uses `AsBool`).

While this may re-introduce the issue that #2848 aimed to solve (where
substores default to not exporting keys), it fixes the immediate problem
of inconsistent behavior. The root cause appears to be in how substores
inherit configuration, which should be addressed separately.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-09-17 21:00:53 +02:00
Dominik Schulz
a46a3bed85
[fix] Use Go 1.24 instead of Go 1.25 (#3226)
Most distributions do not package 1.25 yet and we do not rely on 1.25
features so far. Make sure to propagate the go.mod version and not the
Go version used to build/run in the postrel helper.

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-09-16 22:17:42 +02:00