@@ -168,6 +168,70 @@ jobs:
168168 -o /tmp/soar-riscv64 && sudo mv /tmp/soar-riscv64 /usr/local/bin/soar-riscv64 && sudo chmod +x /usr/local/bin/soar-riscv64
169169 fi
170170
171+ - name : Detect build dependencies
172+ id : detect-deps
173+ run : |
174+ # Fetch recipe content
175+ RECIPE_CONTENT=$(curl -fsSL "${{ inputs.sbuild-url }}" 2>/dev/null || echo "")
176+
177+ if [[ -z "$RECIPE_CONTENT" ]]; then
178+ echo "::warning::Could not fetch recipe, using provided build-deps"
179+ echo "deps=${{ inputs.build-deps }}" >> $GITHUB_OUTPUT
180+ exit 0
181+ fi
182+
183+ DETECTED_DEPS=""
184+
185+ # Check for nix (shell: nix-shell, nix-build, or nix commands in script)
186+ if echo "$RECIPE_CONTENT" | grep -qiE '(shell:\s*nix|nix-build|nix-shell|nix\s+build|nix\s+develop)'; then
187+ DETECTED_DEPS="${DETECTED_DEPS},nix"
188+ fi
189+
190+ # Check for docker
191+ if echo "$RECIPE_CONTENT" | grep -qiE '(docker\s+build|docker\s+run|dockerfile)'; then
192+ DETECTED_DEPS="${DETECTED_DEPS},docker"
193+ fi
194+
195+ # Check for go
196+ if echo "$RECIPE_CONTENT" | grep -qiE '(go\s+build|go\s+install|CGO_|go\s+mod)'; then
197+ DETECTED_DEPS="${DETECTED_DEPS},go"
198+ fi
199+
200+ # Check for rust/cargo
201+ if echo "$RECIPE_CONTENT" | grep -qiE '(cargo\s+build|cargo\s+install|rustc|Cargo\.toml)'; then
202+ DETECTED_DEPS="${DETECTED_DEPS},rust"
203+ fi
204+
205+ # Check for zig
206+ if echo "$RECIPE_CONTENT" | grep -qiE '(zig\s+build|zig\s+cc)'; then
207+ DETECTED_DEPS="${DETECTED_DEPS},zig"
208+ fi
209+
210+ # Check for python/pip
211+ if echo "$RECIPE_CONTENT" | grep -qiE '(pip\s+install|python\s+setup\.py|pyproject\.toml)'; then
212+ DETECTED_DEPS="${DETECTED_DEPS},python"
213+ fi
214+
215+ # Always include build-essential for C/C++ builds
216+ if echo "$RECIPE_CONTENT" | grep -qiE '(make\s|cmake|configure|gcc|g\+\+|clang)'; then
217+ DETECTED_DEPS="${DETECTED_DEPS},build-essential"
218+ fi
219+
220+ # Remove leading comma
221+ DETECTED_DEPS="${DETECTED_DEPS#,}"
222+
223+ # Merge with explicitly provided deps (explicit deps take priority)
224+ if [[ -n "${{ inputs.build-deps }}" ]]; then
225+ # If explicit deps provided, use those instead
226+ FINAL_DEPS="${{ inputs.build-deps }}"
227+ else
228+ FINAL_DEPS="$DETECTED_DEPS"
229+ fi
230+
231+ echo "Detected dependencies: $DETECTED_DEPS"
232+ echo "Final dependencies: $FINAL_DEPS"
233+ echo "deps=$FINAL_DEPS" >> $GITHUB_OUTPUT
234+
171235 - name : Create metadata release (soar-nest)
172236 if : inputs.metadata-release == true
173237 env :
@@ -191,12 +255,12 @@ jobs:
191255 continue-on-error : true
192256
193257 - name : Install build dependencies
194- if : inputs.build- deps != ''
258+ if : steps.detect-deps.outputs. deps != ''
195259 env :
196260 GITHUB_TOKEN : " ${{ github.token }}"
197261 run : |
198262 set -euo pipefail
199- BUILD_DEPS="${{ inputs.build- deps }}"
263+ BUILD_DEPS="${{ steps.detect-deps.outputs. deps }}"
200264
201265 # Parse comma-separated deps
202266 IFS=',' read -ra DEPS <<< "$BUILD_DEPS"
@@ -331,6 +395,14 @@ jobs:
331395 run : |
332396 set +e # Don't exit on error, we want to capture the result
333397
398+ # Source nix if installed
399+ if [[ "${NIX_INSTALLED:-}" == "true" ]]; then
400+ if [[ -f /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh ]]; then
401+ source /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
402+ fi
403+ export PATH="/nix/var/nix/profiles/default/bin:${HOME}/.nix-profile/bin:$PATH"
404+ fi
405+
334406 SBUILD="${SYSTMP}/sbuild"
335407 if [[ "${QEMU_MODE:-}" == "true" ]]; then
336408 SBUILD="${SYSTMP}/sbuild-riscv64"
0 commit comments