From 52334c28308f27f17934996ea9ea657d4feae194 Mon Sep 17 00:00:00 2001 From: nikitachapovskii-dev Date: Tue, 27 Oct 2026 13:24:37 +0100 Subject: [PATCH 1/3] chore: split Actor changelogs by build and attribute commits by paths --- .github/cliff.toml | 9 ++++++- .github/workflows/release-generic-actors.yaml | 19 ++++++++++++-- .../cheerio-scraper/CHANGELOG.md | 21 ++++++++++++---- .../playwright-scraper/CHANGELOG.md | 23 +++++++++++++---- .../puppeteer-scraper/CHANGELOG.md | 17 ++++++++++--- .../sitemap-scraper/CHANGELOG.md | 25 +++++++++++++------ .../actor-scraper/web-scraper/CHANGELOG.md | 19 +++++++++++--- 7 files changed, 105 insertions(+), 28 deletions(-) diff --git a/.github/cliff.toml b/.github/cliff.toml index 6e02c453..67ddcd41 100644 --- a/.github/cliff.toml +++ b/.github/cliff.toml @@ -1,6 +1,6 @@ # git-cliff configuration for the generic scrapers. # -# Derived from apify/actions/git-cliff-release/cliff.toml with three deliberate deltas: +# Derived from apify/actions/git-cliff-release/cliff.toml with four deliberate deltas: # # 1. `tag_pattern` matches the per-Actor tag namespace (`-v`). # Every Actor has its own version line and is released on its own, so the release @@ -14,6 +14,11 @@ # Upstream's body-based "Security" parser is dropped: git-cliff applies a parser when any of # its fields matches, so it cannot be limited to a scope and would let any commit through. # +# 4. `include_paths` limits each changelog to the commits that touch the Actor's directory or +# packages/scraper-tools. A shared scope says nothing about which Actors a commit changed, so +# without it a `fix(deps)` for one Actor would land in the changelog of every other Actor too. +# The release workflow replaces ACTOR_PATH before each run, the same way as ALLOWED_SCOPES. +# [changelog] # changelog body will be rendered even if there are no releases to process - required for pre-release version bumps @@ -77,6 +82,8 @@ conventional_commits = true filter_unconventional = true # process each line of a commit as an individual commit split_commits = false +# only process the commits that touch these paths - see delta 4 at the top +include_paths = ["ACTOR_PATH/**", "packages/scraper-tools/**"] # regex for preprocessing the commit messages commit_preprocessors = [] # regex for parsing and grouping commits diff --git a/.github/workflows/release-generic-actors.yaml b/.github/workflows/release-generic-actors.yaml index 3097eee5..f2a19908 100644 --- a/.github/workflows/release-generic-actors.yaml +++ b/.github/workflows/release-generic-actors.yaml @@ -159,14 +159,21 @@ jobs: # Every Actor keeps its own release history under its own tag namespace, so the # changelog covers the commits since *this* Actor was last released. Of those, only # the commits scoped to this Actor - its directory or one of its aliases - or to - # work shared by every Actor are documented. + # work shared by every Actor are documented, and only if they touch the Actor's + # directory or scraper-tools. own=$(jq -r --arg a "$ACTOR" '.[] | select(.actor == $a) | [.actor] + .aliases | join("|")' .github/release-actors.json) + path=$(jq -r --arg a "$ACTOR" '.[] | select(.actor == $a) | .path // empty' .github/release-actors.json) if [ -z "$own" ]; then echo "::error title=Empty scope list::Could not read the scopes of $ACTOR from .github/release-actors.json" exit 1 fi + if [ -z "$path" ]; then + echo "::error title=Empty path::Could not read the path of $ACTOR from .github/release-actors.json" + exit 1 + fi + # Shared by every Actor: cross-Actor work, dependency fixes, and the library they # all build on. Plain `chore(deps)` bumps are skipped regardless of scope. scopes="$own|generic|scrapers|actors|deps|scraper-tools" @@ -175,6 +182,7 @@ jobs: sed -E \ -e "s#^tag_pattern = .*#tag_pattern = \"^${ACTOR}-v\"#" \ -e "s#ALLOWED_SCOPES#${scopes}#g" \ + -e "s#ACTOR_PATH#${path}#g" \ .github/cliff.toml > "$RUNNER_TEMP/cliff.toml" # A substitution that stops matching leaves git-cliff working, just on the wrong @@ -192,7 +200,14 @@ jobs: exit 1 fi - grep -F -e 'tag_pattern = ' -e "($scopes)" "$RUNNER_TEMP/cliff.toml" + # Without the path filter every shared-scope commit would reach this changelog again, + # whichever Actor it changed. + if grep -q 'ACTOR_PATH' "$RUNNER_TEMP/cliff.toml" || ! grep -qF "include_paths = [\"$path/**\"" "$RUNNER_TEMP/cliff.toml"; then + echo "::error title=Config not scoped::the path filter is missing - check the ACTOR_PATH placeholder in .github/cliff.toml" + exit 1 + fi + + grep -F -e 'tag_pattern = ' -e "($scopes)" -e 'include_paths = ' "$RUNNER_TEMP/cliff.toml" - name: Prepare release metadata id: metadata diff --git a/packages/actor-scraper/cheerio-scraper/CHANGELOG.md b/packages/actor-scraper/cheerio-scraper/CHANGELOG.md index 86bfc3f2..23ed8044 100644 --- a/packages/actor-scraper/cheerio-scraper/CHANGELOG.md +++ b/packages/actor-scraper/cheerio-scraper/CHANGELOG.md @@ -2,17 +2,28 @@ All notable changes to this project will be documented in this file. - ## 3.0.23 (2026-10-27) +_Maintenance build: dependency updates, no user-facing changes._ + +## 3.0.22 (2026-09-03) + ### 🐛 Bug Fixes -- **scrapers:** Use RequestQueue directly to avoid excessive RQ writes on runs with large startUrls list (#393) -- **cheerio:** Enforce min memory to 256 -- **actors:** Deterministic monorepo builds + browser stack from digest-pinned bases -- **deps:** Dedupe puppeteer to a single 25.2.0, revert type workarounds - **scraper-tools:** Restore saveSnapshot() under content-type v2 (#361) +## 3.0.19 (2026-07-01) + +### 🐛 Bug Fixes + +- **actors:** Deterministic monorepo builds + browser stack from digest-pinned bases + +## 3.0.18 (2026-05-18) + +### 🐛 Bug Fixes + +- **scrapers:** Use RequestQueue directly to avoid excessive RQ writes on runs with large startUrls list (apify-sdk-js#393) +- **cheerio:** Enforce min memory to 256 ## 3.0.15 (2024-10-25) diff --git a/packages/actor-scraper/playwright-scraper/CHANGELOG.md b/packages/actor-scraper/playwright-scraper/CHANGELOG.md index c914d3f6..8476d890 100644 --- a/packages/actor-scraper/playwright-scraper/CHANGELOG.md +++ b/packages/actor-scraper/playwright-scraper/CHANGELOG.md @@ -2,17 +2,30 @@ All notable changes to this project will be documented in this file. - ## 1.0.23 (2026-10-27) +### ⚙️ Miscellaneous Tasks + +- **generic:** Run Actors on patched Node 24.22.1 (#376) + +## 1.0.22 (2026-09-08) + ### 🐛 Bug Fixes -- **scrapers:** Use RequestQueue directly to avoid excessive RQ writes on runs with large startUrls list (#393) -- **actors:** Deterministic monorepo builds + browser stack from digest-pinned bases -- **deps:** Dedupe puppeteer to a single 25.2.0, revert type workarounds -- **scraper-tools:** Restore saveSnapshot() under content-type v2 (#361) - **playwright-scraper:** Hold playwright at 1.61.1 (#363) +## 1.0.21 (2026-09-03) + +### 🐛 Bug Fixes + +- **scraper-tools:** Restore saveSnapshot() under content-type v2 (#361) + +## 1.0.18 (2026-07-01) + +### 🐛 Bug Fixes + +- **scrapers:** Use RequestQueue directly to avoid excessive RQ writes on runs with large startUrls list (apify-sdk-js#393) +- **actors:** Deterministic monorepo builds + browser stack from digest-pinned bases ## 1.0.15 (2024-10-25) diff --git a/packages/actor-scraper/puppeteer-scraper/CHANGELOG.md b/packages/actor-scraper/puppeteer-scraper/CHANGELOG.md index 23ec6c5b..e7523462 100644 --- a/packages/actor-scraper/puppeteer-scraper/CHANGELOG.md +++ b/packages/actor-scraper/puppeteer-scraper/CHANGELOG.md @@ -2,16 +2,25 @@ All notable changes to this project will be documented in this file. - ## 3.0.19 (2026-10-27) +### ⚙️ Miscellaneous Tasks + +- **generic:** Run Actors on patched Node 24.22.1 (#376) + +## 3.0.18 (2026-09-03) + ### 🐛 Bug Fixes -- **scrapers:** Use RequestQueue directly to avoid excessive RQ writes on runs with large startUrls list (#393) -- **actors:** Deterministic monorepo builds + browser stack from digest-pinned bases -- **deps:** Dedupe puppeteer to a single 25.2.0, revert type workarounds - **scraper-tools:** Restore saveSnapshot() under content-type v2 (#361) +## 3.0.15 (2026-07-01) + +### 🐛 Bug Fixes + +- **scrapers:** Use RequestQueue directly to avoid excessive RQ writes on runs with large startUrls list (apify-sdk-js#393) +- **actors:** Deterministic monorepo builds + browser stack from digest-pinned bases +- **deps:** Dedupe puppeteer to a single 25.2.0, revert type workarounds ## 3.0.12 (2024-10-25) diff --git a/packages/actor-scraper/sitemap-scraper/CHANGELOG.md b/packages/actor-scraper/sitemap-scraper/CHANGELOG.md index 4240472d..5344eec8 100644 --- a/packages/actor-scraper/sitemap-scraper/CHANGELOG.md +++ b/packages/actor-scraper/sitemap-scraper/CHANGELOG.md @@ -2,14 +2,30 @@ All notable changes to this project will be documented in this file. - ## 0.1.31 (2026-10-27) +_Maintenance build: dependency updates, no user-facing changes._ + +## 0.1.30 (2026-09-03) + +### 🐛 Bug Fixes + +- **scraper-tools:** Restore saveSnapshot() under content-type v2 (#361) + +## 0.1.28 (2026-07-21) + ### 🚀 Features -- **sitemap:** Add lastmod to extracted page output (#301) - **sitemap-scraper:** Add option to list sitemap URLs only (#332) +## Before 0.1.28 (2026-01-20 – 2026-07-09) + +_The builds before 0.1.28 are no longer on the Apify platform, so these changes are not split by build._ + +### 🚀 Features + +- **sitemap:** Add lastmod to extracted page output (#301) + ### 🐛 Bug Fixes - **sitemap-scraper:** Bump @crawlee/utils to support `sitemap_index.xml` @@ -21,8 +37,3 @@ All notable changes to this project will be documented in this file. - **sitemap-scraper:** Support gzipped sitemap bodies without refetching - **sitemap-extractor:** Retry discovery once without proxy - **actors:** Deterministic monorepo builds + browser stack from digest-pinned bases -- **deps:** Dedupe puppeteer to a single 25.2.0, revert type workarounds -- **scraper-tools:** Restore saveSnapshot() under content-type v2 (#361) - - -Releases made before this changelog was introduced are not documented. diff --git a/packages/actor-scraper/web-scraper/CHANGELOG.md b/packages/actor-scraper/web-scraper/CHANGELOG.md index 94161ab2..1508e522 100644 --- a/packages/actor-scraper/web-scraper/CHANGELOG.md +++ b/packages/actor-scraper/web-scraper/CHANGELOG.md @@ -2,20 +2,31 @@ All notable changes to this project will be documented in this file. - ## 3.0.26 (2026-10-27) +### ⚙️ Miscellaneous Tasks + +- **generic:** Run Actors on patched Node 24.22.1 (#376) + +## 3.0.24 (2026-09-03) + +### 🐛 Bug Fixes + +- **scraper-tools:** Restore saveSnapshot() under content-type v2 (#361) + +## 3.0.22 (2026-07-09) + ### 🚀 Features - **web-scraper:** Support limited permissions for named storage inputs (#318) +## 3.0.21 (2026-07-01) + ### 🐛 Bug Fixes -- **scrapers:** Use RequestQueue directly to avoid excessive RQ writes on runs with large startUrls list (#393) +- **scrapers:** Use RequestQueue directly to avoid excessive RQ writes on runs with large startUrls list (apify-sdk-js#393) - **actors:** Deterministic monorepo builds + browser stack from digest-pinned bases - **deps:** Dedupe puppeteer to a single 25.2.0, revert type workarounds -- **scraper-tools:** Restore saveSnapshot() under content-type v2 (#361) - ## 3.0.18 (2024-10-25) From a4d3318f01b99a6b5ed6023b9dfeef3a53f09791 Mon Sep 17 00:00:00 2001 From: nikitachapovskii-dev Date: Tue, 27 Oct 2026 13:28:55 +0100 Subject: [PATCH 2/3] chore: keep the release workflow unchanged --- .github/cliff.toml | 9 +-------- .github/workflows/release-generic-actors.yaml | 19 ++----------------- 2 files changed, 3 insertions(+), 25 deletions(-) diff --git a/.github/cliff.toml b/.github/cliff.toml index 67ddcd41..6e02c453 100644 --- a/.github/cliff.toml +++ b/.github/cliff.toml @@ -1,6 +1,6 @@ # git-cliff configuration for the generic scrapers. # -# Derived from apify/actions/git-cliff-release/cliff.toml with four deliberate deltas: +# Derived from apify/actions/git-cliff-release/cliff.toml with three deliberate deltas: # # 1. `tag_pattern` matches the per-Actor tag namespace (`-v`). # Every Actor has its own version line and is released on its own, so the release @@ -14,11 +14,6 @@ # Upstream's body-based "Security" parser is dropped: git-cliff applies a parser when any of # its fields matches, so it cannot be limited to a scope and would let any commit through. # -# 4. `include_paths` limits each changelog to the commits that touch the Actor's directory or -# packages/scraper-tools. A shared scope says nothing about which Actors a commit changed, so -# without it a `fix(deps)` for one Actor would land in the changelog of every other Actor too. -# The release workflow replaces ACTOR_PATH before each run, the same way as ALLOWED_SCOPES. -# [changelog] # changelog body will be rendered even if there are no releases to process - required for pre-release version bumps @@ -82,8 +77,6 @@ conventional_commits = true filter_unconventional = true # process each line of a commit as an individual commit split_commits = false -# only process the commits that touch these paths - see delta 4 at the top -include_paths = ["ACTOR_PATH/**", "packages/scraper-tools/**"] # regex for preprocessing the commit messages commit_preprocessors = [] # regex for parsing and grouping commits diff --git a/.github/workflows/release-generic-actors.yaml b/.github/workflows/release-generic-actors.yaml index f2a19908..3097eee5 100644 --- a/.github/workflows/release-generic-actors.yaml +++ b/.github/workflows/release-generic-actors.yaml @@ -159,21 +159,14 @@ jobs: # Every Actor keeps its own release history under its own tag namespace, so the # changelog covers the commits since *this* Actor was last released. Of those, only # the commits scoped to this Actor - its directory or one of its aliases - or to - # work shared by every Actor are documented, and only if they touch the Actor's - # directory or scraper-tools. + # work shared by every Actor are documented. own=$(jq -r --arg a "$ACTOR" '.[] | select(.actor == $a) | [.actor] + .aliases | join("|")' .github/release-actors.json) - path=$(jq -r --arg a "$ACTOR" '.[] | select(.actor == $a) | .path // empty' .github/release-actors.json) if [ -z "$own" ]; then echo "::error title=Empty scope list::Could not read the scopes of $ACTOR from .github/release-actors.json" exit 1 fi - if [ -z "$path" ]; then - echo "::error title=Empty path::Could not read the path of $ACTOR from .github/release-actors.json" - exit 1 - fi - # Shared by every Actor: cross-Actor work, dependency fixes, and the library they # all build on. Plain `chore(deps)` bumps are skipped regardless of scope. scopes="$own|generic|scrapers|actors|deps|scraper-tools" @@ -182,7 +175,6 @@ jobs: sed -E \ -e "s#^tag_pattern = .*#tag_pattern = \"^${ACTOR}-v\"#" \ -e "s#ALLOWED_SCOPES#${scopes}#g" \ - -e "s#ACTOR_PATH#${path}#g" \ .github/cliff.toml > "$RUNNER_TEMP/cliff.toml" # A substitution that stops matching leaves git-cliff working, just on the wrong @@ -200,14 +192,7 @@ jobs: exit 1 fi - # Without the path filter every shared-scope commit would reach this changelog again, - # whichever Actor it changed. - if grep -q 'ACTOR_PATH' "$RUNNER_TEMP/cliff.toml" || ! grep -qF "include_paths = [\"$path/**\"" "$RUNNER_TEMP/cliff.toml"; then - echo "::error title=Config not scoped::the path filter is missing - check the ACTOR_PATH placeholder in .github/cliff.toml" - exit 1 - fi - - grep -F -e 'tag_pattern = ' -e "($scopes)" -e 'include_paths = ' "$RUNNER_TEMP/cliff.toml" + grep -F -e 'tag_pattern = ' -e "($scopes)" "$RUNNER_TEMP/cliff.toml" - name: Prepare release metadata id: metadata From 6e437f5456e394188aefba5cf36c9bbaeb6a09e5 Mon Sep 17 00:00:00 2001 From: nikitachapovskii-dev Date: Tue, 27 Oct 2026 13:37:22 +0100 Subject: [PATCH 3/3] chore: drop build-internal entries and note undocumented sitemap releases --- .../cheerio-scraper/CHANGELOG.md | 6 ------ .../playwright-scraper/CHANGELOG.md | 1 - .../puppeteer-scraper/CHANGELOG.md | 1 - .../sitemap-scraper/CHANGELOG.md | 20 +------------------ .../actor-scraper/web-scraper/CHANGELOG.md | 1 - 5 files changed, 1 insertion(+), 28 deletions(-) diff --git a/packages/actor-scraper/cheerio-scraper/CHANGELOG.md b/packages/actor-scraper/cheerio-scraper/CHANGELOG.md index 23ed8044..7671550a 100644 --- a/packages/actor-scraper/cheerio-scraper/CHANGELOG.md +++ b/packages/actor-scraper/cheerio-scraper/CHANGELOG.md @@ -12,12 +12,6 @@ _Maintenance build: dependency updates, no user-facing changes._ - **scraper-tools:** Restore saveSnapshot() under content-type v2 (#361) -## 3.0.19 (2026-07-01) - -### 🐛 Bug Fixes - -- **actors:** Deterministic monorepo builds + browser stack from digest-pinned bases - ## 3.0.18 (2026-05-18) ### 🐛 Bug Fixes diff --git a/packages/actor-scraper/playwright-scraper/CHANGELOG.md b/packages/actor-scraper/playwright-scraper/CHANGELOG.md index 8476d890..793f5ddf 100644 --- a/packages/actor-scraper/playwright-scraper/CHANGELOG.md +++ b/packages/actor-scraper/playwright-scraper/CHANGELOG.md @@ -25,7 +25,6 @@ All notable changes to this project will be documented in this file. ### 🐛 Bug Fixes - **scrapers:** Use RequestQueue directly to avoid excessive RQ writes on runs with large startUrls list (apify-sdk-js#393) -- **actors:** Deterministic monorepo builds + browser stack from digest-pinned bases ## 1.0.15 (2024-10-25) diff --git a/packages/actor-scraper/puppeteer-scraper/CHANGELOG.md b/packages/actor-scraper/puppeteer-scraper/CHANGELOG.md index e7523462..c79ac2f1 100644 --- a/packages/actor-scraper/puppeteer-scraper/CHANGELOG.md +++ b/packages/actor-scraper/puppeteer-scraper/CHANGELOG.md @@ -19,7 +19,6 @@ All notable changes to this project will be documented in this file. ### 🐛 Bug Fixes - **scrapers:** Use RequestQueue directly to avoid excessive RQ writes on runs with large startUrls list (apify-sdk-js#393) -- **actors:** Deterministic monorepo builds + browser stack from digest-pinned bases - **deps:** Dedupe puppeteer to a single 25.2.0, revert type workarounds ## 3.0.12 (2024-10-25) diff --git a/packages/actor-scraper/sitemap-scraper/CHANGELOG.md b/packages/actor-scraper/sitemap-scraper/CHANGELOG.md index 5344eec8..ea57f822 100644 --- a/packages/actor-scraper/sitemap-scraper/CHANGELOG.md +++ b/packages/actor-scraper/sitemap-scraper/CHANGELOG.md @@ -18,22 +18,4 @@ _Maintenance build: dependency updates, no user-facing changes._ - **sitemap-scraper:** Add option to list sitemap URLs only (#332) -## Before 0.1.28 (2026-01-20 – 2026-07-09) - -_The builds before 0.1.28 are no longer on the Apify platform, so these changes are not split by build._ - -### 🚀 Features - -- **sitemap:** Add lastmod to extracted page output (#301) - -### 🐛 Bug Fixes - -- **sitemap-scraper:** Bump @crawlee/utils to support `sitemap_index.xml` -- **sitemap-scraper:** Restore sitemap discovery timeout after merge conflict -- **sitemap-scraper:** Remove skipNavigation and parse sitemap from body -- **sitemap-scraper:** Remove proxy input and enforce stateless no-cookie sitemap discovery -- **sitemap-scraper:** Disable cookies for impit-based sitemap discovery -- **sitemap-scraper:** Allow rss/atom/text sitemap mime types in crawler -- **sitemap-scraper:** Support gzipped sitemap bodies without refetching -- **sitemap-extractor:** Retry discovery once without proxy -- **actors:** Deterministic monorepo builds + browser stack from digest-pinned bases +Releases before 0.1.28 are not documented. diff --git a/packages/actor-scraper/web-scraper/CHANGELOG.md b/packages/actor-scraper/web-scraper/CHANGELOG.md index 1508e522..82811538 100644 --- a/packages/actor-scraper/web-scraper/CHANGELOG.md +++ b/packages/actor-scraper/web-scraper/CHANGELOG.md @@ -25,7 +25,6 @@ All notable changes to this project will be documented in this file. ### 🐛 Bug Fixes - **scrapers:** Use RequestQueue directly to avoid excessive RQ writes on runs with large startUrls list (apify-sdk-js#393) -- **actors:** Deterministic monorepo builds + browser stack from digest-pinned bases - **deps:** Dedupe puppeteer to a single 25.2.0, revert type workarounds ## 3.0.18 (2024-10-25)