Fix josh-proxy rejecting stored filter path with slash

Josh-proxy's parser treats "/" in :+ paths as a filter separator,
so :+.josh-filters/backend fails. Use flat naming at repo root:
.josh-filter-<target>.josh referenced as :+.josh-filter-<target>.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-14 09:47:16 +03:00
parent 187a9ead14
commit 5929585d6c
4 changed files with 15 additions and 13 deletions

View File

@@ -8,9 +8,11 @@
# Requires: lib/core.sh sourced first, yq and jq on PATH
# ─── Josh Filter File Generation ──────────────────────────────────
# Generates .josh-filters/<target>.josh for targets with exclude patterns.
# Generates .josh-filter-<target>.josh for targets with exclude patterns.
# These files must be committed to the monorepo — josh-proxy reads them
# from the repo at clone time via the :+ stored filter syntax.
# Files are at the repo root (flat naming) because josh-proxy's parser
# treats "/" in :+ paths as a filter separator.
_generate_josh_filters() {
local has_excludes
@@ -20,8 +22,6 @@ _generate_josh_filters() {
return
fi
mkdir -p .josh-filters
local target_name subfolder exclude_patterns filter_content
while IFS= read -r target_name; do
subfolder=$(echo "$JOSH_SYNC_TARGETS" | jq -r --arg n "$target_name" \
@@ -33,7 +33,7 @@ _generate_josh_filters() {
${exclude_patterns}
]"
local filter_file=".josh-filters/${target_name}.josh"
local filter_file=".josh-filter-${target_name}.josh"
local existing=""
if [ -f "$filter_file" ]; then
existing=$(cat "$filter_file")
@@ -75,9 +75,9 @@ parse_config() {
export JOSH_SYNC_TARGETS
JOSH_SYNC_TARGETS=$(echo "$config_json" | jq '[.targets[] | . +
# Auto-derive josh_filter from subfolder if not set
# When exclude patterns are present, use a stored josh filter (:+.josh-filters/<name>)
# When exclude patterns are present, use a stored josh filter (:+.josh-filter-<name>)
(if (.exclude // [] | length) > 0 then
{josh_filter: (":+.josh-filters/" + .name)}
{josh_filter: (":+.josh-filter-" + .name)}
elif (.josh_filter // "") == "" then
{josh_filter: (":/" + .subfolder)}
else {} end) +
@@ -98,7 +98,7 @@ parse_config() {
)
]')
# Generate .josh-filters/*.josh for targets with exclude patterns
# Generate .josh-filter-*.josh for targets with exclude patterns
_generate_josh_filters
# Load .env credentials (if present, not required — CI sets these via secrets)