1{ 2 lib, 3 stdenv, 4 buildGoModule, 5 faketty, 6 fetchFromGitHub, 7 fetchYarnDeps, 8 fixup-yarn-lock, 9 go, 10 makeWrapper, 11 nodejs, 12 nix-update-script, 13 patchelf, 14 removeReferencesTo, 15 testers, 16 yarn, 17}: 18 19stdenv.mkDerivation (finalAttrs: { 20 pname = "cdktf-cli"; 21 version = "0.21.0"; 22 23 src = fetchFromGitHub { 24 owner = "hashicorp"; 25 repo = "terraform-cdk"; 26 tag = "v${finalAttrs.version}"; 27 hash = "sha256-iqy8j1bqwjSRBOj8kjFtAq9dLiv6dDbJsiFGQUhGW7k="; 28 }; 29 30 offlineCache = fetchYarnDeps { 31 yarnLock = "${finalAttrs.src}/yarn.lock"; 32 hash = "sha256-qGjzy/+u8Ui9aHK0sX3MfYbkj5Cqab4RlhOgrwbEmGs="; 33 }; 34 35 hcl2json-go-modules = 36 (buildGoModule { 37 pname = "cdktf-hcl2json-go-modules"; 38 inherit (finalAttrs) version src; 39 modRoot = "packages/@cdktf/hcl2json"; 40 vendorHash = "sha256-OiKPq0CHkOxJaFzgsaNJ02tasvHtHWylmaPRPayJob4="; 41 proxyVendor = true; 42 doCheck = false; 43 env.GOWORK = "off"; 44 }).goModules; 45 46 hcltools-go-modules = 47 (buildGoModule { 48 pname = "cdktf-hcltools-go-modules"; 49 inherit (finalAttrs) version src; 50 modRoot = "packages/@cdktf/hcl-tools"; 51 vendorHash = "sha256-orGxkYEQVtTKvXb7/FD/CLwqSINgBQFTF5arbR0xAvE="; 52 proxyVendor = true; 53 doCheck = false; 54 env.GOWORK = "off"; 55 }).goModules; 56 57 strictDeps = true; 58 disallowedReferences = [ go ]; 59 60 nativeBuildInputs = [ 61 faketty 62 fixup-yarn-lock 63 go 64 makeWrapper 65 nodejs 66 patchelf 67 removeReferencesTo 68 yarn 69 ]; 70 71 postPatch = '' 72 # wasm_exec has moved to lib in newer versions of Go 73 substituteInPlace packages/@cdktf/hcl-tools/prebuild.sh \ 74 --replace-fail "misc/wasm/wasm_exec.js" "lib/wasm/wasm_exec.js" 75 substituteInPlace packages/@cdktf/hcl2json/prebuild.sh \ 76 --replace-fail "misc/wasm/wasm_exec.js" "lib/wasm/wasm_exec.js" 77 ''; 78 79 preConfigure = '' 80 export GOCACHE=$TMPDIR/go-cache 81 export GOPATH=$TMPDIR/go 82 export GOPROXY=file://${finalAttrs.hcltools-go-modules},file://${finalAttrs.hcl2json-go-modules} 83 export GOSUMDB=off 84 85 # Stop the build from trying to write checkpoints to /var/empty/ 86 export CHECKPOINT_DISABLE=1 87 ''; 88 89 configurePhase = '' 90 runHook preConfigure 91 92 export HOME=$(mktemp -d) 93 yarn config --offline set yarn-offline-mirror $offlineCache 94 fixup-yarn-lock yarn.lock 95 yarn --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive install 96 patchShebangs node_modules packages 97 98 runHook postConfigure 99 ''; 100 101 buildPhase = '' 102 runHook preBuild 103 104 faketty yarn --offline build 105 106 runHook postBuild 107 ''; 108 109 doCheck = true; 110 checkPhase = '' 111 runHook preCheck 112 113 # Skip tests that require terraform (unfree) 114 yarn --offline workspace cdktf-cli test -- \ 115 --testPathIgnorePatterns \ 116 "src/test/cmds/(convert|init).test.ts" 117 118 runHook postCheck 119 ''; 120 121 installPhase = '' 122 runHook preInstall 123 124 yarn --offline --production install 125 126 mkdir -p "$out/lib/node_modules/cdktf-cli" 127 cp -rL node_modules packages/cdktf-cli/bundle packages/cdktf-cli/package.json "$out/lib/node_modules/cdktf-cli/" 128 129 makeWrapper "${lib.getExe nodejs}" "$out/bin/cdktf" \ 130 --add-flags "$out/lib/node_modules/cdktf-cli/bundle/bin/cdktf.js" 131 132 runHook postInstall 133 ''; 134 135 postInstall = '' 136 # Go isn't needed at runtime, so remove these to decrease the closure size 137 remove-references-to -t ${go} \ 138 "$out/lib/node_modules/cdktf-cli/node_modules/@cdktf/hcl-tools/main.wasm" \ 139 "$out/lib/node_modules/cdktf-cli/node_modules/@cdktf/hcl2json/main.wasm" 140 ''; 141 142 passthru = { 143 tests.version = testers.testVersion { 144 package = finalAttrs.finalPackage; 145 }; 146 updateScript = nix-update-script { }; 147 }; 148 149 meta = { 150 description = "CDK for Terraform CLI"; 151 homepage = "https://github.com/hashicorp/terraform-cdk"; 152 changelog = "https://github.com/hashicorp/terraform-cdk/releases/tag/${finalAttrs.src.tag}"; 153 license = lib.licenses.mpl20; 154 mainProgram = "cdktf"; 155 maintainers = with lib.maintainers; [ deejayem ]; 156 platforms = lib.platforms.unix; 157 }; 158})