Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
75c8873
feat: add country selection for AT/DE support
udondan May 30, 2026
c9dd26c
docs: update README and SKILL.md for AT/DE country support
udondan May 30, 2026
8954ba4
docs: combine retailer table with AT/DE columns in SKILL.md
udondan May 30, 2026
8dd2d2e
docs: align retailer table columns in SKILL.md
udondan May 30, 2026
f64c91c
feat: add tests for getApiBase
udondan May 30, 2026
b45ef9c
chore: update package description for AT/DE support
udondan May 30, 2026
8d021cf
chore: drop CH — api.marktguru.ch does not exist
udondan May 30, 2026
bbda886
chore: remove Switzerland from package description
udondan May 30, 2026
d52f2cf
fix: pass country to extractApiKey during auto-login in search
udondan May 30, 2026
8277f3f
fix: clear API key when country changes in set-country
udondan May 30, 2026
beb63ac
fix: only report apiKeyCleared:true in JSON when a key was actually c…
udondan May 30, 2026
4ac9f76
fix: validate country code before interpolating into URLs
udondan May 30, 2026
37840bd
chore: use fr as unsupported country test case instead of de.evil.com
udondan May 30, 2026
6f65c21
Merge pull request #1 from udondan/worktree-feat+country-selection
udondan May 30, 2026
4cf577e
chore: set up release-please, npm trusted publishing and publish as @…
udondan Sep 17, 2026
2fc2c58
chore(deps): update dependency @types/node to v20.19.43 (#4)
renovate[bot] Sep 17, 2026
f53424a
chore: add npm keywords for package discoverability (#6)
udondan Sep 17, 2026
83f74d9
chore(deps): update dependency header-generator to v2.1.88 (#7)
renovate[bot] Sep 17, 2026
ddc9b4a
chore(deps): update dependency tsx to v4.23.13 (#8)
renovate[bot] Sep 17, 2026
0d8deab
chore(deps): update dependency @types/node to v22 (#9)
renovate[bot] Sep 17, 2026
cfb06c0
chore(deps): update dependency commander to v15 (#10)
renovate[bot] Sep 17, 2026
1217052
chore: lint with eslint and prettier, drop oxlint (#12)
udondan Sep 17, 2026
95d2a73
fix: keep --version in sync with the released version (#13)
udondan Sep 17, 2026
0be5083
chore: cache npm downloads in CI and stop automerging majors (#14)
udondan Sep 17, 2026
ef509ce
chore: add AGENTS.md with contributor guidance for coding agents (#15)
udondan Sep 17, 2026
9992cec
chore(deps): update dependency @types/node to v24 (#16)
renovate[bot] Sep 17, 2026
51a06f4
chore: move SKILL.md into skills/ and document npx skills install (#17)
udondan Sep 17, 2026
79edddb
chore(main): release 1.0.0 (#3)
udondan Sep 17, 2026
fdb70d0
chore: drop header-generator dependency (#18)
udondan Sep 18, 2026
b769fcd
chore(main): release 1.0.1 (#19)
udondan Sep 18, 2026
977c1d3
chore(deps): update dependency @types/node to v24.13.5 (#20)
renovate[bot] Sep 19, 2026
a53c5be
chore(deps): update dependency prettier to v3.9.8 (#21)
renovate[bot] Sep 20, 2026
cbf24d6
chore(deps): update dependency eslint to v10.11.0 (#22)
renovate[bot] Sep 22, 2026
86f6338
chore(deps): update dependency @types/node to v24.13.6 (#23)
renovate[bot] Sep 22, 2026
8a5fc83
chore(deps): update dependency tsx to v4.23.15 (#24)
renovate[bot] Sep 23, 2026
d0c242b
chore(deps): update dependency typescript-eslint to v8.70.1 (#25)
renovate[bot] Sep 25, 2026
eaeb3c0
chore(deps): update dependency prettier to v3.9.9 (#26)
renovate[bot] Sep 26, 2026
68b3806
chore: enable Renovate full mode (#27)
udondan Sep 28, 2026
813a160
chore(deps): update dependency @types/node to v24.19.0 (#28)
renovate[bot] Sep 29, 2026
8a29795
chore: always use semantic commits for Renovate updates (#29)
udondan Sep 29, 2026
8df77f5
chore: release dependency updates as patch releases (#30)
udondan Sep 29, 2026
4606b00
chore(deps): update dependency typescript-eslint to v8.71.0 (#32)
renovate[bot] Sep 29, 2026
3a402fe
chore: use shared Renovate config (#33)
udondan Sep 29, 2026
37245b7
chore: require one status check and conventional PR titles (#34)
udondan Sep 30, 2026
4ee35b2
chore: queue test runs with wait-for-turn (#35)
udondan Sep 30, 2026
3d3a35c
chore(deps): pin googleapis/release-please-action action to 45996ed (…
renovate[bot] Oct 13, 2026
575c8ab
chore(deps): update dependency @types/node to v24.19.2 (#37)
renovate[bot] Oct 13, 2026
37ec3b0
chore(deps): update lint tooling (#38)
renovate[bot] Oct 13, 2026
70391b3
chore(main): release 1.0.2 (#31)
udondan Oct 13, 2026
8677e03
chore(deps): update udondan/wait-for-turn to v1.4.0 (#39)
udondan Oct 14, 2026
1a6a418
chore(deps): update dependency typescript-eslint to v8.71.2 (#41)
renovate[bot] Oct 15, 2026
222b740
chore(deps): update dependency eslint-plugin-prettier to v5.5.7 (#42)
renovate[bot] Oct 16, 2026
a66ec0f
chore(deps): lock file maintenance (#43)
renovate[bot] Oct 19, 2026
eb8de37
chore(main): release 1.0.3 (#40)
udondan Oct 19, 2026
a93593d
chore(deps): update dependency eslint to v10.13.0 (#44)
renovate[bot] Oct 20, 2026
3c612a6
chore(deps): update dependency typescript-eslint to v8.72.0 (#46)
renovate[bot] Oct 22, 2026
16693b2
chore(deps): lock file maintenance (#47)
renovate[bot] Oct 26, 2026
6484755
chore(main): release 1.0.4 (#45)
udondan Oct 26, 2026
e1c1059
chore(deps): update dependency node to v26 (#48)
renovate[bot] Oct 28, 2026
8f4f82a
chore: lint GitHub Actions workflows with actionlint (#50)
udondan Oct 28, 2026
7908e07
chore(deps): update jdx/mise-action action to v5 (#51)
renovate[bot] Oct 28, 2026
41b0224
chore: lint GitHub Actions workflows with zizmor and pin actions to S…
udondan Oct 28, 2026
b1f96b9
chore: keep first-party actions on version tags (#53)
udondan Oct 28, 2026
73a19e5
chore(deps): update dependency typescript-eslint to v8.72.1 (#54)
renovate[bot] Oct 29, 2026
9bfe5e3
chore(deps): update jdx/mise-action action to v5.2.4 (#55)
renovate[bot] Oct 30, 2026
cf0f5ae
chore(deps): update udondan/wait-for-turn action to v1.4.2 (#56)
renovate[bot] Oct 30, 2026
8680adf
chore(deps): update udondan/wait-for-turn action to v1.5.0 (#57)
renovate[bot] Oct 30, 2026
4a779b1
chore(deps): update udondan/wait-for-turn action to v1.6.0 (#58)
renovate[bot] Oct 30, 2026
c7a4e04
chore(deps): update udondan/wait-for-turn action to v1.7.1 (#60)
renovate[bot] Oct 31, 2026
0368be5
fix(deps): override minimatch to patched version (#59)
udondan Oct 31, 2026
a2aed6b
chore(deps): update udondan/wait-for-turn action to v1.8.0 (#61)
renovate[bot] Oct 31, 2026
b5e47fa
chore(deps): update udondan/wait-for-turn action to v1.9.0 (#62)
renovate[bot] Oct 31, 2026
4532861
chore(deps): update dependency @types/node to v26.6.6 (#63)
renovate[bot] Oct 31, 2026
e718137
chore(deps): update udondan/wait-for-turn action to v1.10.1 (#64)
renovate[bot] Nov 1, 2026
78eadfd
chore(deps): lock file maintenance (#65)
renovate[bot] Nov 2, 2026
dd07246
chore(main): release 1.0.5 (#49)
udondan Nov 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions .github/workflows/automerge-schedule.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
name: Schedule Release Automerge

on:
schedule:
- cron: "0 9 * * 1" # Every Monday at 9am UTC
workflow_dispatch:

# The job only uses OVERRIDE_TOKEN, not the workflow token.
permissions: {}

jobs:
automerge:
if: ${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) }}
runs-on: ubuntu-latest
steps:
- name: Enable auto-merge on release-please PR
env:
GH_TOKEN: ${{ secrets.OVERRIDE_TOKEN }}
REPO: ${{ github.repository }}
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
run: |
PRS=$(gh pr list \
--repo "$REPO" \
--label "autorelease: pending" \
--base "$DEFAULT_BRANCH" \
--state open \
--json number)

PR_COUNT=$(printf '%s' "$PRS" | jq 'length')

if [ "$PR_COUNT" -gt 1 ]; then
echo "Expected at most one open release-please PR, found $PR_COUNT"
exit 1
fi

PR=$(printf '%s' "$PRS" | jq -r '.[0].number // empty')

if [ -n "$PR" ]; then
gh pr merge "$PR" --auto --squash --delete-branch \
--repo "$REPO"
echo "Auto-merge enabled on PR #$PR"
else
echo "No open release-please PR found"
fi
18 changes: 0 additions & 18 deletions .github/workflows/ci.yml

This file was deleted.

23 changes: 23 additions & 0 deletions .github/workflows/pr-conventional-title.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
name: Conventional PR Title

on:
pull_request:
types:
- opened
- reopened
- edited
- synchronize

permissions:
pull-requests: read

jobs:
# Required by the ruleset. Squash merges use the PR title as the commit
# message, which release-please reads.
conventional-pr-title:
runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
38 changes: 38 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
name: Publish packages

on:
push:
tags:
- "v*"
workflow_dispatch:

jobs:
publish:
runs-on: ubuntu-latest

permissions:
id-token: write
contents: read

steps:
- name: Checkout code
uses: actions/checkout@v7
with:
fetch-depth: 1
persist-credentials: false

- uses: actions/setup-node@v7
with:
node-version: 26.x
registry-url: https://registry.npmjs.org
package-manager-cache: false

- name: Install dependencies
run: npm ci

- name: Test
run: npm test

- name: Publish to npm
run: npm publish --provenance --access public
20 changes: 20 additions & 0 deletions .github/workflows/release-please.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
name: release-please

on:
workflow_dispatch:
push:
branches:
- main

permissions:
contents: write
pull-requests: write

jobs:
release-please:
runs-on: ubuntu-latest
steps:
- uses: googleapis/release-please-action@45996ed1f6d02564a971a2fa1b5860e934307cf7 # v5.0.0
with:
token: ${{ secrets.OVERRIDE_TOKEN }}
124 changes: 124 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
---
name: Test

permissions:
contents: read

on:
pull_request:
branches:
- main
push:
branches:
- main
workflow_dispatch:

jobs:
# Only one run at a time may run the live tests against Marktguru.
wait-for-turn:
runs-on: ubuntu-latest
timeout-minutes: 180
permissions:
actions: read
contents: write # lock refs under refs/wait-for-turn/
pull-requests: read # labels for label-weights
# A new commit on the branch cancels the waiting of the outdated run, so the
# new run doesn't queue behind it. Once a run has the turn, this job is
# done: test jobs that already run are never cancelled.
concurrency:
group: test-wait-${{ github.head_ref || github.ref }}
cancel-in-progress: true
steps:
# Queue order: manual PRs first, then Renovate updates, then the
# release-please PR, which is updated after every merge to main anyway.
# Fails right away if the branch is behind main. Branch protection
# requires PRs to be up to date, so testing an outdated branch is wasted
# time: it has to be updated and tested again.
- name: Wait for turn
uses: udondan/wait-for-turn@6b186ff5846e833fafb79256c0c484a61b293196 # v1.10.1
with:
require-up-to-date: true
label-weights: |
autorelease: pending=-10
renovate=-5

test:
needs: wait-for-turn
# A skipped job counts as passed for required checks. Run the job even if
# wait-for-turn failed and fail it in the first step.
if: ${{ !cancelled() }}
runs-on: ubuntu-latest

defaults:
run:
shell: bash

steps:
- name: Check turn
if: needs.wait-for-turn.result != 'success'
run: exit 1

- name: Checkout code
uses: actions/checkout@v7
with:
fetch-depth: 1
persist-credentials: false

- uses: actions/setup-node@v7
with:
node-version: 26.x

- name: Cache node modules
id: cache-npm
uses: actions/cache@v6
env:
cache-name: cache-node-modules
with:
path: .npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-

- name: Install dependencies
run: make install

- name: Linting
run: make eslint

- name: Test
run: make test

- name: Validate package
run: make validate-package

actions:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
persist-credentials: false

- uses: jdx/mise-action@6be3c7ed4c21d4f76b208d351d95aac273ebb76d # v5.2.4
with:
install_args: actionlint shellcheck zizmor

# Also runs shellcheck over every `run:` block.
- name: actionlint
run: actionlint

- name: zizmor
run: zizmor .
env:
GH_TOKEN: ${{ github.token }} # zizmor checks the actions online

# The only test check the ruleset requires, whatever jobs are added later.
required:
needs: [wait-for-turn, test, actions]
if: always()
runs-on: ubuntu-latest
steps:
- name: Check result
if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')
run: exit 1
8 changes: 8 additions & 0 deletions .github/zizmor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# First-party actions keep their version tags, everything else is pinned to a commit SHA.
rules:
unpinned-uses:
config:
policies:
"actions/*": ref-pin
"github/*": ref-pin
"*": hash-pin
12 changes: 5 additions & 7 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
scripts/try-http-login.*
node_modules/
.claude
.npm/
*.tgz
dist/
node_modules/
npm-debug.log*
pnpm-debug.log*
yarn-error.log*
.DS_Store
AGENTS.md
CLAUDE.md
scripts/try-http-login.*
5 changes: 5 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
dist
node_modules
package-lock.json
CHANGELOG.md
tests/fixtures
11 changes: 11 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"singleQuote": true,
"overrides": [
{
"files": ["*.yaml", "*.yml"],
"options": {
"singleQuote": false
}
}
]
}
3 changes: 3 additions & 0 deletions .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
".": "1.0.5"
}
Loading