@@ -92,29 +92,21 @@ jobs:
9292 - name : Checkout repository
9393 uses : actions/checkout@v6
9494
95- - name : Cache remote_pkgver state
96- id : cache
97- uses : actions/cache@v5
98- with :
99- path : .rolling-state.json
100- key : rolling-remote-versions-v1
101- restore-keys : |
102- rolling-remote-versions-v1
95+ - name : Download sbuild
96+ run : |
97+ curl -fsSL "https://github.com/pkgforge/sbuilder/releases/download/nightly/sbuild-x86_64-linux" \
98+ -o /usr/local/bin/sbuild && chmod +x /usr/local/bin/sbuild
99+ sbuild --version
103100
104101 - name : Check for source updates
105102 id : check
106103 env :
107104 GITHUB_TOKEN : ${{ github.token }}
108105 GHCR_OWNER : ${{ github.repository_owner }}
106+ SBUILD_CACHE_URI : ${{ secrets.SBUILD_CACHE_URI }}
109107 run : |
110108 TO_REBUILD="[]"
111109 PACKAGES='${{ needs.find-rolling-packages.outputs.packages }}'
112- STATE_FILE=".rolling-state.json"
113-
114- # Initialize state file if doesn't exist
115- if [ ! -f "$STATE_FILE" ]; then
116- echo "{}" > "$STATE_FILE"
117- fi
118110
119111 # Function to extract pkgver script from x_exec block
120112 extract_pkgver_script() {
@@ -181,6 +173,12 @@ jobs:
181173 grep -E "^ghcr_pkg:" "$file" | head -1 | sed 's/^ghcr_pkg:[[:space:]]*//; s/^"//; s/"$//'
182174 }
183175
176+ # Function to extract pkg_id from recipe
177+ get_pkg_id() {
178+ local file="$1"
179+ grep -E "^pkg_id:" "$file" | head -1 | sed 's/^pkg_id:[[:space:]]*//; s/^"//; s/"$//'
180+ }
181+
184182 echo "$PACKAGES" | jq -c '.[]' | while IFS= read -r pkg; do
185183 path=$(echo "$pkg" | jq -r '.path')
186184 family=$(echo "$pkg" | jq -r '.family')
@@ -192,24 +190,37 @@ jobs:
192190 pkg_name="$family" # fallback to family name
193191 fi
194192
195- # Check for ghcr_pkg
196- ghcr_pkg =$(get_ghcr_pkg "$path")
193+ # Extract pkg_id for cache lookup
194+ pkg_id =$(get_pkg_id "$path")
197195
198- echo "::group::Checking $family/$name (pkg : $pkg_name )"
196+ echo "::group::Checking $family/$name (pkg_id : $pkg_id )"
199197
200- # Skip if no ghcr_pkg
201- if [ -z "$ghcr_pkg " ]; then
202- echo "No ghcr_pkg set - cannot track version , skipping"
198+ # Skip if no pkg_id
199+ if [ -z "$pkg_id " ]; then
200+ echo "No pkg_id set - cannot check cache , skipping"
203201 echo "::endgroup::"
204202 continue
205203 fi
206204
207205 NEEDS_REBUILD=false
208206 NEW_VERSION=""
209- CACHED_VERSION=""
210-
211- # Get cached remote_pkgver from state file
212- CACHED_VERSION=$(jq -r --arg key "$path" '.[$key] // ""' "$STATE_FILE")
207+ STORED_VERSION=""
208+
209+ # Query MongoDB for stored version
210+ CACHE_DATA=$(sbuild cache get --package "$pkg_id" --json 2>/dev/null || echo "{}")
211+ REMOTE_VER=$(echo "$CACHE_DATA" | jq -r '.remote_version // ""')
212+ CURRENT_VER=$(echo "$CACHE_DATA" | jq -r '.current_version // ""')
213+
214+ # Use remote_version if set, otherwise fall back to current_version
215+ if [ -n "$REMOTE_VER" ] && [ "$REMOTE_VER" != "null" ]; then
216+ STORED_VERSION="$REMOTE_VER"
217+ echo "Stored remote_version: $STORED_VERSION"
218+ elif [ -n "$CURRENT_VER" ] && [ "$CURRENT_VER" != "null" ]; then
219+ STORED_VERSION="$CURRENT_VER"
220+ echo "No remote_version, using current_version: $STORED_VERSION"
221+ else
222+ echo "No stored version in cache"
223+ fi
213224
214225 # Try to extract and run pkgver script
215226 PKGVER_SCRIPT=$(extract_pkgver_script "$path")
@@ -220,17 +231,17 @@ jobs:
220231
221232 if [ -n "$NEW_VERSION" ]; then
222233 echo "New version from pkgver: $NEW_VERSION"
223- echo "Cached version: ${CACHED_VERSION :-<none>}"
234+ echo "Stored version: ${STORED_VERSION :-<none>}"
224235
225- # Compare new version with cached version
226- if [ -n "$CACHED_VERSION " ] && [ "$NEW_VERSION" != "$CACHED_VERSION " ]; then
227- echo "Version changed: $CACHED_VERSION -> $NEW_VERSION"
236+ # Compare new version with stored version
237+ if [ -n "$STORED_VERSION " ] && [ "$NEW_VERSION" != "$STORED_VERSION " ]; then
238+ echo "Version changed: $STORED_VERSION -> $NEW_VERSION"
228239 NEEDS_REBUILD=true
229- elif [ -z "$CACHED_VERSION " ]; then
230- echo "No cached version - first build or cache cleared , will trigger rebuild"
240+ elif [ -z "$STORED_VERSION " ]; then
241+ echo "No stored version - first build, will trigger rebuild"
231242 NEEDS_REBUILD=true
232243 else
233- echo "Version unchanged (matches cache )"
244+ echo "Version unchanged (matches stored )"
234245 fi
235246 else
236247 echo "pkgver script returned empty result"
@@ -248,8 +259,6 @@ jobs:
248259 echo "Marking for rebuild"
249260 # Write to temp file to persist across subshell
250261 echo "$path|$NEW_VERSION" >> /tmp/to_rebuild.txt
251- # Update state file with new version
252- jq --arg key "$path" --arg ver "$NEW_VERSION" '.[$key] = $ver' "$STATE_FILE" > "$STATE_FILE.tmp" && mv "$STATE_FILE.tmp" "$STATE_FILE"
253262 else
254263 echo "No rebuild needed"
255264 fi
@@ -277,13 +286,6 @@ jobs:
277286 echo "has_updates=false" >> $GITHUB_OUTPUT
278287 fi
279288
280- - name : Update rolling state cache
281- if : always()
282- run : |
283- if [ -f .rolling-state.json ]; then
284- echo "State file updated with $(jq 'length' .rolling-state.json) tracked versions"
285- fi
286-
287289 rebuild :
288290 needs : [find-rolling-packages, check-for-updates]
289291 if : needs.check-for-updates.outputs.has_updates == 'true'
0 commit comments