45 lines
1.2 KiB
Bash
45 lines
1.2 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
# Generates a Nix expression to fetch swiftpm dependencies, and a
|
||
|
# configurePhase snippet to prepare a working directory for swift-build.
|
||
|
|
||
|
set -eu -o pipefail
|
||
|
shopt -s lastpipe
|
||
|
|
||
|
stateFile=".build/workspace-state.json"
|
||
|
if [[ ! -f "$stateFile" ]]; then
|
||
|
echo >&2 "Missing $stateFile. Run 'swift package resolve' first."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
if [[ "$(jq .version $stateFile)" != "5" ]]; then
|
||
|
echo >&2 "Unsupported $stateFile version"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Iterate dependencies and prefetch.
|
||
|
hashes=""
|
||
|
jq -r '.object.dependencies[] | "\(.subpath) \(.packageRef.location) \(.state.checkoutState.revision)"' $stateFile \
|
||
|
| while read -r name url rev; do
|
||
|
echo >&2 "-- Fetching $name"
|
||
|
sha256="$(nix-prefetch-git $url $rev | jq -r .sha256)"
|
||
|
hashes+="
|
||
|
\"$name\" = \"$sha256\";"
|
||
|
echo >&2
|
||
|
done
|
||
|
hashes+=$'\n'" "
|
||
|
|
||
|
# Generate output.
|
||
|
mkdir -p nix
|
||
|
# Copy the workspace state, but clear 'artifacts'.
|
||
|
jq '.object.artifacts = []' < $stateFile > nix/workspace-state.json
|
||
|
# Build an expression for fetching sources, and preparing the working directory.
|
||
|
cat > nix/default.nix << EOF
|
||
|
# This file was generated by swiftpm2nix.
|
||
|
{
|
||
|
workspaceStateFile = ./workspace-state.json;
|
||
|
hashes = {$hashes};
|
||
|
}
|
||
|
EOF
|
||
|
echo >&2 "-- Generated ./nix"
|