Why === New version Changes === * fix update script * Update wheel package format compatible versions * add missing mcp python package dependency Test plan === ``` [ryantm:~/p/nixpkgs]$ ./result/bin/semgrep --version [00.05][WARNING](ca-certs): Ignored 176 trust anchors. 1.140.0 ```
127 lines
3.9 KiB
Bash
Executable File
127 lines
3.9 KiB
Bash
Executable File
#!/usr/bin/env nix-shell
|
|
#!nix-shell -i bash -p curl gnused jq nix-prefetch
|
|
|
|
set -euxo pipefail
|
|
|
|
# provide a github token so you don't get rate limited
|
|
# if you use gh cli you can use:
|
|
# `export GITHUB_TOKEN="$(cat ~/.config/gh/config.yml | yq '.hosts."github.com".oauth_token' -r)"`
|
|
# or just set your token by hand:
|
|
# `read -s -p "Enter your token: " GITHUB_TOKEN; export GITHUB_TOKEN`
|
|
# (we use read so it doesn't show in our shell history and in secret mode so the token you paste isn't visible)
|
|
if [ -z "${GITHUB_TOKEN:-}" ]; then
|
|
echo "no GITHUB_TOKEN provided - you could meet API request limiting" >&2
|
|
fi
|
|
|
|
ROOT="$(dirname "$(readlink -f "$0")")"
|
|
NIXPKGS_ROOT="$ROOT/../../../.."
|
|
|
|
COMMON_FILE="$ROOT/common.nix"
|
|
|
|
instantiateClean() {
|
|
nix-instantiate -A "$1" --eval --strict | cut -d\" -f2
|
|
}
|
|
|
|
# get latest version
|
|
NEW_VERSION=$(
|
|
curl -s -L -H \
|
|
"Accept: application/vnd.github.v3+json" \
|
|
${GITHUB_TOKEN:+ -H "Authorization: bearer $GITHUB_TOKEN"} \
|
|
https://api.github.com/repos/semgrep/semgrep/releases/latest \
|
|
| jq -r '.tag_name'
|
|
)
|
|
# trim v prefix
|
|
NEW_VERSION="${NEW_VERSION:1}"
|
|
OLD_VERSION="$(instantiateClean semgrep.passthru.common.version)"
|
|
|
|
replace() {
|
|
sed -i "s@$1@$2@g" "$3"
|
|
}
|
|
|
|
fetchgithub() {
|
|
set +eo pipefail
|
|
nix-build -A "$1" 2>&1 >/dev/null | grep "got:" | cut -d':' -f2 | sed 's| ||g'
|
|
set -eo pipefail
|
|
}
|
|
replace "$OLD_VERSION" "$NEW_VERSION" "$COMMON_FILE"
|
|
|
|
echo "Updating src"
|
|
|
|
OLD_HASH="$(instantiateClean semgrep.passthru.common.srcHash)"
|
|
echo "Old hash $OLD_HASH"
|
|
TMP_HASH="sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
|
|
replace "$OLD_HASH" "$TMP_HASH" "$COMMON_FILE"
|
|
NEW_HASH="$(fetchgithub semgrep.src)"
|
|
echo "New hash $NEW_HASH"
|
|
replace "$TMP_HASH" "$NEW_HASH" "$COMMON_FILE"
|
|
|
|
echo "Updated src"
|
|
|
|
|
|
update_core_platform() {
|
|
SYSTEM=$1
|
|
echo "Updating core src $SYSTEM"
|
|
|
|
PLATFORM="$(instantiateClean "semgrep.passthru.common.core.$SYSTEM.platform")"
|
|
|
|
OLD_HASH="$(instantiateClean "semgrep.passthru.common.core.$SYSTEM.hash")"
|
|
URL="$(nix-instantiate -A "semgrep.passthru.semgrep-core.src.url" --raw --eval --strict --argstr system "$SYSTEM")"
|
|
echo "Old core hash $OLD_HASH"
|
|
NEW_HASH="$(nix hash convert --hash-algo sha256 --to sri $(nix-prefetch-url $URL))"
|
|
echo "New core hash $NEW_HASH"
|
|
replace "$OLD_HASH" "$NEW_HASH" "$COMMON_FILE"
|
|
|
|
echo "Updated core src $SYSTEM"
|
|
}
|
|
|
|
update_core_platform "x86_64-linux"
|
|
update_core_platform "aarch64-linux"
|
|
update_core_platform "x86_64-darwin"
|
|
update_core_platform "aarch64-darwin"
|
|
|
|
OLD_PWD=$PWD
|
|
TMPDIR="$(mktemp -d)"
|
|
# shallow clone to check submodule commits, don't actually need the submodules
|
|
git clone https://github.com/semgrep/semgrep "$TMPDIR/semgrep" --depth 1 --branch "v$NEW_VERSION"
|
|
|
|
get_submodule_commit() {
|
|
OLD_PWD=$PWD
|
|
(
|
|
cd "$TMPDIR/semgrep"
|
|
git ls-tree --object-only HEAD "$1"
|
|
cd "$OLD_PWD"
|
|
)
|
|
}
|
|
|
|
# loop through submodules
|
|
nix-instantiate -E "with import $NIXPKGS_ROOT {}; builtins.attrNames semgrep.passthru.common.submodules" --eval --strict --json \
|
|
| jq '.[]' -r \
|
|
| while read -r SUBMODULE; do
|
|
echo "Updating $SUBMODULE"
|
|
OLD_REV=$(instantiateClean semgrep.passthru.common.submodules."$SUBMODULE".rev)
|
|
echo "Old commit $OLD_REV"
|
|
OLD_HASH=$(instantiateClean semgrep.passthru.common.submodules."$SUBMODULE".hash)
|
|
echo "Old hash $OLD_HASH"
|
|
|
|
NEW_REV=$(get_submodule_commit "$SUBMODULE")
|
|
echo "New commit $NEW_REV"
|
|
|
|
if [[ "$OLD_REV" == "$NEW_REV" ]]; then
|
|
echo "$SUBMODULE already up to date"
|
|
continue
|
|
fi
|
|
|
|
TMP_HASH="sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
|
|
replace "$OLD_REV" "$NEW_REV" "$COMMON_FILE"
|
|
replace "$OLD_HASH" "$TMP_HASH" "$COMMON_FILE"
|
|
NEW_HASH="$(fetchgithub semgrep.passthru.submodulesSubset."$SUBMODULE")"
|
|
echo "New hash $NEW_HASH"
|
|
replace "$TMP_HASH" "$NEW_HASH" "$COMMON_FILE"
|
|
|
|
echo "Updated $SUBMODULE"
|
|
done
|
|
|
|
rm -rf "$TMPDIR"
|
|
|
|
echo "Finished"
|