From b60cb63fdb45f9fda526f862a045f1b6d482ee53 Mon Sep 17 00:00:00 2001 From: Sander Declerck Date: Tue, 2 Dec 2025 09:26:16 +0100 Subject: [PATCH] Add --include-python and --ci args --- install-scripts/install-safe-chain.ps1 | 38 ++++++++++++++-- install-scripts/install-safe-chain.sh | 63 ++++++++++++++++++++++++-- 2 files changed, 92 insertions(+), 9 deletions(-) diff --git a/install-scripts/install-safe-chain.ps1 b/install-scripts/install-safe-chain.ps1 index 9283170..b9a8cd8 100644 --- a/install-scripts/install-safe-chain.ps1 +++ b/install-scripts/install-safe-chain.ps1 @@ -1,6 +1,23 @@ # Downloads and installs safe-chain for Windows -# Usage: iex (iwr "https://raw.githubusercontent.com/AikidoSec/safe-chain/main/install-scripts/install-safe-chain.ps1" -UseBasicParsing) +# +# Usage examples: +# +# Default (JavaScript packages only): +# iex (iwr "https://raw.githubusercontent.com/AikidoSec/safe-chain/main/install-scripts/install-safe-chain.ps1" -UseBasicParsing) +# +# CI setup (JavaScript packages only): +# iex "& { $(iwr 'https://raw.githubusercontent.com/AikidoSec/safe-chain/main/install-scripts/install-safe-chain.ps1' -UseBasicParsing) } -ci" +# +# Include Python packages: +# iex "& { $(iwr 'https://raw.githubusercontent.com/AikidoSec/safe-chain/main/install-scripts/install-safe-chain.ps1' -UseBasicParsing) } -includepython" +# +# CI setup with Python packages: +# iex "& { $(iwr 'https://raw.githubusercontent.com/AikidoSec/safe-chain/main/install-scripts/install-safe-chain.ps1' -UseBasicParsing) } -ci -includepython" +param( + [switch]$ci, + [switch]$includepython +) $Version = "v0.0.4-binaries-beta" $InstallDir = Join-Path $env:USERPROFILE ".safe-chain\bin" @@ -139,19 +156,32 @@ function Install-SafeChain { Write-Info "Binary installed to: $finalFile" + # Build setup command based on parameters + $setupCmd = if ($ci) { "setup-ci" } else { "setup" } + $setupArgs = @() + if ($includepython) { + $setupArgs += "--include-python" + } + # Execute safe-chain setup + Write-Info "Running safe-chain $setupCmd $(if ($setupArgs) { $setupArgs -join ' ' })..." try { $env:Path = "$env:Path;$InstallDir" - & $finalFile setup + + if ($setupArgs) { + & $finalFile $setupCmd $setupArgs + } else { + & $finalFile $setupCmd + } if ($LASTEXITCODE -ne 0) { Write-Warn "safe-chain was installed but setup encountered issues." - Write-Warn "You can run 'safe-chain setup' manually later." + Write-Warn "You can run 'safe-chain $setupCmd $(if ($setupArgs) { $setupArgs -join ' ' })' manually later." } } catch { Write-Warn "safe-chain was installed but setup encountered issues: $_" - Write-Warn "You can run 'safe-chain setup' manually later." + Write-Warn "You can run 'safe-chain $setupCmd $(if ($setupArgs) { $setupArgs -join ' ' })' manually later." } } diff --git a/install-scripts/install-safe-chain.sh b/install-scripts/install-safe-chain.sh index 671e52e..f51cf1f 100755 --- a/install-scripts/install-safe-chain.sh +++ b/install-scripts/install-safe-chain.sh @@ -1,8 +1,24 @@ #!/bin/sh # Downloads and installs safe-chain, depending on the operating system and architecture -# Usage: curl -fsSL https://raw.githubusercontent.com/AikidoSec/safe-chain/main/install-scripts/install-safe-chain.sh | sh -# or: wget -qO- https://raw.githubusercontent.com/AikidoSec/safe-chain/main/install-scripts/install-safe-chain.sh | sh +# +# Usage examples: +# +# Default (JavaScript packages only): +# curl -fsSL https://raw.githubusercontent.com/AikidoSec/safe-chain/main/install-scripts/install-safe-chain.sh | sh +# wget -qO- https://raw.githubusercontent.com/AikidoSec/safe-chain/main/install-scripts/install-safe-chain.sh | sh +# +# CI setup (JavaScript packages only): +# curl -fsSL https://raw.githubusercontent.com/AikidoSec/safe-chain/main/install-scripts/install-safe-chain.sh | sh -s -- --ci +# wget -qO- https://raw.githubusercontent.com/AikidoSec/safe-chain/main/install-scripts/install-safe-chain.sh | sh -s -- --ci +# +# Include Python packages: +# curl -fsSL https://raw.githubusercontent.com/AikidoSec/safe-chain/main/install-scripts/install-safe-chain.sh | sh -s -- --include-python +# wget -qO- https://raw.githubusercontent.com/AikidoSec/safe-chain/main/install-scripts/install-safe-chain.sh | sh -s -- --include-python +# +# CI setup with Python packages: +# curl -fsSL https://raw.githubusercontent.com/AikidoSec/safe-chain/main/install-scripts/install-safe-chain.sh | sh -s -- --ci --include-python +# wget -qO- https://raw.githubusercontent.com/AikidoSec/safe-chain/main/install-scripts/install-safe-chain.sh | sh -s -- --ci --include-python set -e # Exit on error @@ -109,8 +125,32 @@ check_volta_installation() { fi } +# Parse command-line arguments +parse_arguments() { + for arg in "$@"; do + case "$arg" in + --ci) + USE_CI_SETUP=true + ;; + --include-python) + INCLUDE_PYTHON=true + ;; + *) + error "Unknown argument: $arg" + ;; + esac + done +} + # Main installation main() { + # Initialize argument flags + USE_CI_SETUP=false + INCLUDE_PYTHON=false + + # Parse command-line arguments + parse_arguments "$@" + info "Installing safe-chain ${VERSION}..." # Check for existing npm installation @@ -146,11 +186,24 @@ main() { info "Binary installed to: $FINAL_FILE" + # Build setup command based on arguments + SETUP_CMD="setup" + SETUP_ARGS="" + + if [ "$USE_CI_SETUP" = "true" ]; then + SETUP_CMD="setup-ci" + fi + + if [ "$INCLUDE_PYTHON" = "true" ]; then + SETUP_ARGS="--include-python" + fi + # Execute safe-chain setup - if ! "$FINAL_FILE" setup; then + info "Running safe-chain $SETUP_CMD $SETUP_ARGS..." + if ! "$FINAL_FILE" $SETUP_CMD $SETUP_ARGS; then warn "safe-chain was installed but setup encountered issues." - warn "You can run 'safe-chain setup' manually later." + warn "You can run 'safe-chain $SETUP_CMD $SETUP_ARGS' manually later." fi } -main +main "$@"