Skip to content

Commit 7e4a4ad

Browse files
gopalldbclaude
andauthored
Remove _remote.repositories from cache + use offline mode for forked PRs (#1391)
## Summary Two fixes for forked PR dependency resolution: 1. **Warmer**: Remove `_remote.repositories` marker files before saving the cache. These files track which repo ID (`jfrog-central`) each artifact was downloaded from. When forked PRs restore the cache in offline mode, Maven refuses artifacts because they were "not downloaded from central". 2. **Fork composite action**: Use Maven offline mode (`-o` via `.mvn/maven.config`) + empty `settings.xml`. With clean cache (no repo ID markers), offline mode resolves everything from `~/.m2/repository` with zero network requests. Also deleted the existing stale cache entry to force a fresh save. ## Test plan - [x] Verified locally: `mvn -o` with removed `_remote.repositories` → BUILD SUCCESS, zero network requests - [ ] After merge: re-trigger cache warmer, then re-run PR #1371 CI NO_CHANGELOG=true This pull request was AI-assisted by Isaac. --------- Signed-off-by: Gopal Lal <gopal.lal@databricks.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent c079ed4 commit 7e4a4ad

2 files changed

Lines changed: 31 additions & 38 deletions

File tree

.github/actions/setup-maven/action.yml

Lines changed: 21 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -21,51 +21,34 @@ runs:
2121
key: maven-deps-${{ hashFiles('**/pom.xml') }}
2222
restore-keys: maven-deps-
2323

24-
- name: Configure Maven without credentials (fork)
24+
- name: Configure Maven for cache-only resolution (fork)
2525
if: inputs.is-fork == 'true'
2626
shell: bash
2727
run: |
2828
mkdir -p ~/.m2
29+
30+
# Remove _remote.repositories marker files. These track which remote
31+
# repo each artifact came from. Without them, Maven treats all cached
32+
# artifacts as locally installed and resolves them without contacting
33+
# any remote server.
34+
find ~/.m2/repository -name '_remote.repositories' -delete 2>/dev/null || true
35+
echo "Removed _remote.repositories markers from cache"
36+
37+
# Enable Maven offline mode via .mvn/maven.config. This file is read
38+
# automatically by Maven as default CLI arguments. Offline mode prevents
39+
# all network requests — no JFrog auth needed, no Maven Central fallback.
40+
# Combined with _remote.repositories removal, Maven resolves everything
41+
# from the local cache.
42+
mkdir -p .mvn
43+
echo "-o" >> .mvn/maven.config
44+
echo "Maven offline mode enabled via .mvn/maven.config"
45+
46+
# Empty settings — no mirrors needed in offline mode.
2947
cat > ~/.m2/settings.xml << 'SETTINGS_EOF'
30-
<settings>
31-
<mirrors>
32-
<mirror>
33-
<id>jfrog-central</id>
34-
<mirrorOf>*</mirrorOf>
35-
<url>https://databricks.jfrog.io/artifactory/db-maven/</url>
36-
</mirror>
37-
</mirrors>
38-
<!-- No <servers> block: forked PRs use cached dependencies only. -->
39-
<!-- updatePolicy=never prevents Maven from checking the remote for
40-
updates, avoiding 401 errors when artifacts are already cached. -->
41-
<profiles>
42-
<profile>
43-
<id>cache-only</id>
44-
<repositories>
45-
<repository>
46-
<id>jfrog-central</id>
47-
<url>https://databricks.jfrog.io/artifactory/db-maven/</url>
48-
<releases><updatePolicy>never</updatePolicy></releases>
49-
<snapshots><updatePolicy>never</updatePolicy></snapshots>
50-
</repository>
51-
</repositories>
52-
<pluginRepositories>
53-
<pluginRepository>
54-
<id>jfrog-central</id>
55-
<url>https://databricks.jfrog.io/artifactory/db-maven/</url>
56-
<releases><updatePolicy>never</updatePolicy></releases>
57-
<snapshots><updatePolicy>never</updatePolicy></snapshots>
58-
</pluginRepository>
59-
</pluginRepositories>
60-
</profile>
61-
</profiles>
62-
<activeProfiles>
63-
<activeProfile>cache-only</activeProfile>
64-
</activeProfiles>
65-
</settings>
48+
<settings />
6649
SETTINGS_EOF
6750
68-
echo "Maven configured for forked PR (cache-only, no JFrog credentials)"
51+
echo "Maven configured for forked PR (cache-only, no remote access)"
6952
7053
# --- Same-repo path: full JFrog OIDC authentication ---
7154
- name: Get JFrog OIDC token

.github/workflows/warmMavenCache.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,16 @@ jobs:
160160
161161
echo "Dependency resolution complete"
162162
163+
- name: Remove _remote.repositories before saving cache
164+
shell: bash
165+
run: |
166+
# Remove _remote.repositories marker files before saving. These track
167+
# which remote repo ID each artifact was downloaded from (jfrog-central).
168+
# Without them, forked PRs can use the cache in offline mode without
169+
# Maven complaining about repo ID mismatches.
170+
COUNT=$(find ~/.m2/repository -name '_remote.repositories' -delete -print | wc -l)
171+
echo "Removed ${COUNT} _remote.repositories markers"
172+
163173
- name: Save Maven dependency cache
164174
uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
165175
with:

0 commit comments

Comments
 (0)