etcd_3_6: init 3.6.4

Release: https://github.com/etcd-io/etcd/releases/tag/v3.6.4

Changelog: https://github.com/etcd-io/etcd/blob/main/CHANGELOG/CHANGELOG-3.6.md

Migration notes: https://etcd.io/docs/v3.6/upgrades/upgrade_3_6/

+222
+148
pkgs/by-name/et/etcd_3_6/package.nix
··· 1 + { 2 + applyPatches, 3 + buildGoModule, 4 + fetchFromGitHub, 5 + fetchpatch, 6 + installShellFiles, 7 + k3s, 8 + lib, 9 + nixosTests, 10 + stdenv, 11 + symlinkJoin, 12 + }: 13 + 14 + let 15 + version = "3.6.4"; 16 + etcdSrcHash = "sha256-otz+06cOD2MVnMZWKId1GN+MeZfnDbdudiYfVCKdzuo="; 17 + etcdCtlVendorHash = "sha256-kTH+s/SY+xwo6kt6iPJ7XDhin0jPk0FBr0eOe/717bE="; 18 + etcdUtlVendorHash = "sha256-P0yx9YMMD9vT7N6LOlo26EAOi+Dj33p3ZjAYEoaL19A="; 19 + etcdServerVendorHash = "sha256-kgbCT1JxI98W89veCItB7ZfW4d9D3/Ip3tOuFKEX9v4="; 20 + 21 + src = applyPatches { 22 + src = fetchFromGitHub { 23 + owner = "etcd-io"; 24 + repo = "etcd"; 25 + tag = "v${version}"; 26 + hash = etcdSrcHash; 27 + }; 28 + patches = [ 29 + (fetchpatch { 30 + url = "https://github.com/etcd-io/etcd/commit/31650ab0c8df43af05fc4c13b48ffee59271eec7.patch"; 31 + hash = "sha256-Q94HOLFx2fnb61wMQsAUT4sIBXfxXqW9YEayukQXX18="; 32 + }) 33 + ]; 34 + }; 35 + 36 + env = { 37 + CGO_ENABLED = 0; 38 + }; 39 + 40 + meta = { 41 + description = "Distributed reliable key-value store for the most critical data of a distributed system"; 42 + downloadPage = "https://github.com/etcd-io/etcd"; 43 + license = lib.licenses.asl20; 44 + homepage = "https://etcd.io/"; 45 + maintainers = with lib.maintainers; [ dtomvan ]; 46 + platforms = lib.platforms.darwin ++ lib.platforms.linux; 47 + }; 48 + 49 + etcdserver = buildGoModule { 50 + pname = "etcdserver"; 51 + 52 + inherit 53 + env 54 + meta 55 + src 56 + version 57 + ; 58 + 59 + vendorHash = etcdServerVendorHash; 60 + 61 + __darwinAllowLocalNetworking = true; 62 + 63 + modRoot = "./server"; 64 + 65 + preInstall = '' 66 + mv $GOPATH/bin/{server,etcd} 67 + ''; 68 + 69 + # We set the GitSHA to `GitNotFound` to match official build scripts when 70 + # git is unavailable. This is to avoid doing a full Git Checkout of etcd. 71 + # User facing version numbers are still available in the binary, just not 72 + # the sha it was built from. 73 + ldflags = [ "-X go.etcd.io/etcd/api/v3/version.GitSHA=GitNotFound" ]; 74 + }; 75 + 76 + etcdutl = buildGoModule { 77 + pname = "etcdutl"; 78 + 79 + inherit 80 + env 81 + meta 82 + src 83 + version 84 + ; 85 + 86 + vendorHash = etcdUtlVendorHash; 87 + 88 + __darwinAllowLocalNetworking = true; 89 + 90 + modRoot = "./etcdutl"; 91 + 92 + nativeBuildInputs = [ installShellFiles ]; 93 + 94 + postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) '' 95 + for shell in bash fish zsh; do 96 + installShellCompletion --cmd etcdutl \ 97 + --$shell <($out/bin/etcdutl completion $shell) 98 + done 99 + ''; 100 + }; 101 + 102 + etcdctl = buildGoModule { 103 + pname = "etcdctl"; 104 + 105 + inherit 106 + env 107 + meta 108 + src 109 + version 110 + ; 111 + 112 + vendorHash = etcdCtlVendorHash; 113 + 114 + modRoot = "./etcdctl"; 115 + 116 + nativeBuildInputs = [ installShellFiles ]; 117 + 118 + postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) '' 119 + for shell in bash fish zsh; do 120 + installShellCompletion --cmd etcdctl \ 121 + --$shell <($out/bin/etcdctl completion $shell) 122 + done 123 + ''; 124 + }; 125 + in 126 + symlinkJoin { 127 + name = "etcd-${version}"; 128 + 129 + inherit meta version; 130 + 131 + passthru = { 132 + deps = { 133 + inherit etcdserver etcdutl etcdctl; 134 + }; 135 + # Fix-Me: Tests for etcd 3.6 needs work. 136 + # tests = { 137 + # inherit (nixosTests) etcd etcd-cluster; 138 + # k3s = k3s.passthru.tests.etcd; 139 + # }; 140 + updateScript = ./update.sh; 141 + }; 142 + 143 + paths = [ 144 + etcdserver 145 + etcdutl 146 + etcdctl 147 + ]; 148 + }
+74
pkgs/by-name/et/etcd_3_6/update.sh
··· 1 + #!/usr/bin/env nix-shell 2 + #!nix-shell -i bash -p curl gnugrep gnused jq nurl 3 + 4 + set -x -eu -o pipefail 5 + 6 + MAJOR_VERSION=3 7 + MINOR_VERSION=6 8 + 9 + ETCD_PATH="$(dirname "$0")" 10 + ETCD_VERSION_MAJOR_MINOR=${MAJOR_VERSION}.${MINOR_VERSION} 11 + ETCD_PKG_NAME=etcd_${MAJOR_VERSION}_${MINOR_VERSION} 12 + NIXPKGS_PATH="$(git rev-parse --show-toplevel)" 13 + 14 + LATEST_TAG=$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} \ 15 + --silent https://api.github.com/repos/etcd-io/etcd/releases \ 16 + | jq -r 'map(select(.prerelease == false))' \ 17 + | jq -r 'map(.tag_name)' \ 18 + | grep "v${ETCD_VERSION_MAJOR_MINOR}." \ 19 + | sed 's|[", ]||g' \ 20 + | sort -rV | head -n1 ) 21 + 22 + LATEST_VERSION=$(echo ${LATEST_TAG} | sed 's/^v//') 23 + 24 + OLD_VERSION="$(nix-instantiate --eval -E "with import $NIXPKGS_PATH {}; \ 25 + $ETCD_PKG_NAME.version or (builtins.parseDrvName $ETCD_PKG_NAME.name).version" | tr -d '"')" 26 + 27 + if [ ! "$OLD_VERSION" = "$LATEST_VERSION" ]; then 28 + echo "Attempting to update etcd from $OLD_VERSION to $LATEST_VERSION" 29 + ETCD_SRC_HASH=$(nix-prefetch-url --quiet --unpack https://github.com/etcd-io/etcd/archive/refs/tags/${LATEST_TAG}.tar.gz) 30 + ETCD_SRC_HASH=$(nix hash to-sri --type sha256 $ETCD_SRC_HASH) 31 + 32 + setKV () { 33 + sed -i "s|$1 = \".*\"|$1 = \"${2:-}\"|" "$ETCD_PATH/default.nix" 34 + } 35 + 36 + setKV version $LATEST_VERSION 37 + setKV etcdSrcHash $ETCD_SRC_HASH 38 + 39 + getAndSetVendorHash () { 40 + local EMPTY_HASH="sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" # Hash from lib.fakeHash 41 + local VENDOR_HASH=$EMPTY_HASH 42 + local PKG_KEY=$1 43 + local INNER_PKG=$2 44 + 45 + setKV $PKG_KEY $EMPTY_HASH 46 + 47 + set +e 48 + VENDOR_HASH=$(nurl -e "(import ${NIXPKGS_PATH}/. {}).$ETCD_PKG_NAME.passthru.deps.$INNER_PKG.goModules") 49 + set -e 50 + 51 + if [ -n "${VENDOR_HASH:-}" ]; then 52 + setKV $PKG_KEY $VENDOR_HASH 53 + else 54 + echo "Update failed. $PKG_KEY is empty." 55 + exit 1 56 + fi 57 + } 58 + 59 + getAndSetVendorHash etcdServerVendorHash etcdserver 60 + getAndSetVendorHash etcdUtlVendorHash etcdutl 61 + getAndSetVendorHash etcdCtlVendorHash etcdctl 62 + 63 + # `git` flag here is to be used by local maintainers to speed up the bump process 64 + if [ $# -eq 1 ] && [ "$1" = "git" ]; then 65 + git switch -c "package-$ETCD_PKG_NAME-$LATEST_VERSION" 66 + git add "$ETCD_PATH"/default.nix 67 + git commit -m "$ETCD_PKG_NAME: $OLD_VERSION -> $LATEST_VERSION 68 + 69 + Release: https://github.com/etcd-io/etcd/releases/tag/$LATEST_TAG" 70 + fi 71 + 72 + else 73 + echo "etcd is already up-to-date at $OLD_VERSION" 74 + fi