depot/third_party/nixpkgs/pkgs/test/nixpkgs-check-by-name/scripts/fetch-tool.sh
Default email 504525a148 Project import generated by Copybara.
GitOrigin-RevId: bd645e8668ec6612439a9ee7e71f7eac4099d4f6
2024-01-02 12:29:13 +01:00

47 lines
1.8 KiB
Bash
Executable file

#!/usr/bin/env bash
# Fetches the prebuilt nixpkgs-check-by-name to use from
# the NixOS channel corresponding to the given base branch
set -o pipefail -o errexit -o nounset
trace() { echo >&2 "$@"; }
if (( $# < 2 )); then
trace "Usage: $0 BASE_BRANCH OUTPUT_PATH"
trace "BASE_BRANCH: The base branch to use, e.g. master or release-23.11"
trace "OUTPUT_PATH: The output symlink path for the tool"
exit 1
fi
baseBranch=$1
output=$2
trace -n "Determining the channel to use for PR base branch $baseBranch.. "
if [[ "$baseBranch" =~ ^(release|staging|staging-next)-([0-9][0-9]\.[0-9][0-9])$ ]]; then
# Use the release channel for all PRs to release-XX.YY, staging-XX.YY and staging-next-XX.YY
preferredChannel=nixos-${BASH_REMATCH[2]}
else
# Use the nixos-unstable channel for all other PRs
preferredChannel=nixos-unstable
fi
# Check that the channel exists. It doesn't exist for fresh release branches
if curl -fSs "https://channels.nixos.org/$preferredChannel"; then
channel=$preferredChannel
trace "$channel"
else
# Fall back to nixos-unstable, makes sense for fresh release branches
channel=nixos-unstable
trace -e "\e[33mWarning: Preferred channel $preferredChannel could not be fetched, using fallback: $channel\e[0m"
fi
trace -n "Fetching latest version of channel $channel.. "
# This is probably the easiest way to get Nix to output the path to a downloaded channel!
nixpkgs=$(nix-instantiate --find-file nixpkgs -I nixpkgs=channel:"$channel")
trace "$nixpkgs"
# This file only exists in channels
trace -e "Git revision of channel $channel is \e[34m$(<"$nixpkgs/.git-revision")\e[0m"
trace -n "Fetching the prebuilt version of nixpkgs-check-by-name.. "
nix-build -o "$output" "$nixpkgs" -A tests.nixpkgs-check-by-name -j 0 >/dev/null
realpath "$output" >&2