nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at python-updates 201 lines 4.4 kB view raw
1{ 2 lts ? false, 3 version, 4 rev ? "refs/tags/v${version}", 5 hash, 6 npmDepsHash, 7 vendorHash, 8 nixUpdateExtraArgs ? [ ], 9}: 10 11{ 12 bash, 13 brotli, 14 buildGoModule, 15 forgejo, 16 git, 17 gzip, 18 lib, 19 makeWrapper, 20 nix-update-script, 21 nixosTests, 22 openssh, 23 sqliteSupport ? true, 24 lndir, 25 runCommand, 26 stdenv, 27 fetchFromCodeberg, 28 buildNpmPackage, 29 writableTmpDirAsHomeHook, 30}: 31 32let 33 src = fetchFromCodeberg { 34 owner = "forgejo"; 35 repo = "forgejo"; 36 inherit rev hash; 37 }; 38 39 frontend = buildNpmPackage { 40 pname = "forgejo-frontend"; 41 inherit src version npmDepsHash; 42 43 buildPhase = '' 44 ./node_modules/.bin/webpack 45 ''; 46 47 # override npmInstallHook 48 installPhase = '' 49 mkdir $out 50 cp -R ./public $out/ 51 ''; 52 }; 53in 54buildGoModule rec { 55 pname = "forgejo" + lib.optionalString lts "-lts"; 56 57 inherit 58 version 59 src 60 vendorHash 61 ; 62 63 subPackages = [ 64 "." 65 "contrib/environment-to-ini" 66 ]; 67 68 outputs = [ 69 "out" 70 "data" 71 ]; 72 73 nativeBuildInputs = [ 74 makeWrapper 75 ]; 76 77 nativeCheckInputs = [ 78 git 79 openssh 80 writableTmpDirAsHomeHook 81 ]; 82 83 patches = [ 84 ./static-root-path.patch 85 ]; 86 87 postPatch = '' 88 substituteInPlace modules/setting/server.go --subst-var data 89 ''; 90 91 tags = lib.optionals sqliteSupport [ 92 "sqlite" 93 "sqlite_unlock_notify" 94 ]; 95 96 ldflags = [ 97 "-s" 98 "-w" 99 "-X main.Version=${version}" 100 "-X 'main.Tags=${lib.concatStringsSep " " tags}'" 101 ]; 102 103 preConfigure = '' 104 export ldflags+=" -X main.ForgejoVersion=$(GITEA_VERSION=${version} make show-version-api)" 105 ''; 106 107 # expose and use the GO_TEST_PACKAGES var from the Makefile 108 # instead of manually copying over the entire list: 109 # https://codeberg.org/forgejo/forgejo/src/tag/v11.0.6/Makefile#L128 110 # https://codeberg.org/forgejo/forgejo/src/tag/v13.0.0/Makefile#L290 111 preCheck = '' 112 echo -e 'show-backend-tests:${lib.optionalString (lib.versionAtLeast version "13") " | compute-go-test-packages"}\n\t@echo ''${GO_TEST_PACKAGES}' >> Makefile 113 getGoDirs() { 114 make show-backend-tests 115 } 116 117 # TestRunHookPrePostReceive (cmd/hook_test.go) needs .git to pass 118 git init 119 ''; 120 121 checkFlags = 122 let 123 skippedTests = [ 124 "TestPassword" # requires network: api.pwnedpasswords.com 125 "TestCaptcha" # requires network: hcaptcha.com 126 "TestDNSUpdate" # requires network: release.forgejo.org 127 "TestMigrateWhiteBlocklist" # requires network: gitlab.com (DNS) 128 "TestURLAllowedSSH/Pushmirror_URL" # requires network git.gay (DNS) 129 ]; 130 in 131 [ "-skip=^${builtins.concatStringsSep "$|^" skippedTests}$" ]; 132 133 preInstall = '' 134 mv "$GOPATH/bin/forgejo.org" "$GOPATH/bin/forgejo" 135 ''; 136 137 postInstall = '' 138 mkdir $data 139 cp -R ./{templates,options} ${frontend}/public $data 140 mkdir -p $out 141 cp -R ./options/locale $out/locale 142 wrapProgram $out/bin/forgejo \ 143 --prefix PATH : ${ 144 lib.makeBinPath [ 145 bash 146 git 147 gzip 148 openssh 149 ] 150 } 151 ''; 152 153 # $data is not available in goModules.drv 154 overrideModAttrs = ( 155 _: { 156 postPatch = null; 157 } 158 ); 159 160 passthru = { 161 # allow nix-update to handle npmDepsHash 162 inherit (frontend) npmDeps; 163 164 data-compressed = 165 runCommand "forgejo-data-compressed" 166 { 167 nativeBuildInputs = [ 168 brotli 169 lndir 170 ]; 171 } 172 '' 173 mkdir $out 174 lndir ${forgejo.data}/ $out/ 175 176 # Create static gzip and brotli files 177 find -L $out -type f -regextype posix-extended -iregex '.*\.(css|html|js|svg|ttf|txt)' \ 178 -exec gzip --best --keep --force {} ';' \ 179 -exec brotli --best --keep --no-copy-stat {} ';' 180 ''; 181 182 tests = if lts then nixosTests.forgejo-lts else nixosTests.forgejo; 183 184 updateScript = nix-update-script { 185 extraArgs = nixUpdateExtraArgs ++ [ 186 "--version-regex" 187 "v(${lib.versions.major version}\\.[0-9.]+)" 188 ]; 189 }; 190 }; 191 192 meta = { 193 description = "Self-hosted lightweight software forge"; 194 homepage = "https://forgejo.org"; 195 changelog = "https://codeberg.org/forgejo/forgejo/releases/tag/v${version}"; 196 license = lib.licenses.gpl3Plus; 197 teams = [ lib.teams.forgejo ]; 198 broken = stdenv.hostPlatform.isDarwin; 199 mainProgram = "forgejo"; 200 }; 201}