depot/ops/maint/update_nixpkgs/update_nixpkgs.sh

77 lines
1.8 KiB
Bash
Executable file

#!/bin/env bash
function die() { echo "$*" >&2; exit 1; }
function check_preconditions() {
test -d /secrets || die "no /secrets directory"
test -d /depot || die "no /depot directory"
}
function clone_depot() {
echo Cloning depot to /depot/depot >&2
hg clone ssh://hg/lukegb/depot /depot/depot
cd /depot/depot
}
function update_depot() {
echo Updating depot checkout in /depot/depot >&2
cd /depot/depot
hg revert -a
hg pull
hg update -r default -C
hg purge --all
hg strip --no-backup 'roots(outgoing())' || true
}
function make_depot_fresh() {
if test -d /depot/depot; then
update_depot
else
clone_depot
fi
}
function clone_nixpkgs() {
echo Cloning nixpkgs to /depot/nixpkgs >&2
git clone --bare https://github.com/NixOS/nixpkgs.git /depot/nixpkgs
}
function update_nixpkgs() {
echo Updating nixpkgs checkout in /depot/nixpkgs >&2
pushd /depot/nixpkgs
git fetch origin nixos-unstable
git branch -f master FETCH_HEAD
popd
}
function make_nixpkgs_fresh() {
if test -d /depot/nixpkgs; then
update_nixpkgs
else
clone_nixpkgs
fi
}
function main() {
set -euxo pipefail
check_preconditions
make_depot_fresh
make_nixpkgs_fresh
# Pre-seed the copybara cache directory, so it doesn't try to do the clone itself.
mkdir -p $HOME/copybara/cache/{git_repos,hg_repos}
hg clone --noupdate /depot/depot $HOME/copybara/cache/hg_repos/file%3A%2F%2F%2Fdepot%2Fdepot
git clone --mirror /depot/nixpkgs $HOME/copybara/cache/git_repos/https%3A%2F%2Fgithub%2Ecom%2FNixOS%2Fnixpkgs%2Egit
sed -i 's,file:///home/lukegb/depot,file:///depot/depot,g' ./third_party/nixpkgs/copy.bara.sky
copybara migrate --verbose ./third_party/nixpkgs/copy.bara.sky || exit 0
# Reset to a clean state.
hg update -r default -C
hg purge --all
# And push, if it that worked.
hg push -r .
}
main