diff --git a/pkgs/applications/version-management/forgejo/default.nix b/pkgs/applications/version-management/forgejo/default.nix index 8693e6d208fa..88fb7ff7bf5b 100644 --- a/pkgs/applications/version-management/forgejo/default.nix +++ b/pkgs/applications/version-management/forgejo/default.nix @@ -1,9 +1,11 @@ { bash +, brotli , buildGoModule , common-updater-scripts , coreutils , curl , fetchurl +, forgejo , git , gzip , jq @@ -15,6 +17,8 @@ , pam , pamSupport ? true , sqliteSupport ? true +, xorg +, runCommand , stdenv , writeShellApplication }: @@ -66,46 +70,60 @@ buildGoModule rec { --prefix PATH : ${lib.makeBinPath [ bash git gzip openssh ]} ''; - passthru.tests = nixosTests.forgejo; + passthru = { + data-compressed = runCommand "forgejo-data-compressed" { + nativeBuildInputs = [ brotli xorg.lndir ]; + } '' + mkdir $out + lndir ${forgejo.data}/ $out/ - passthru.updateScript = lib.getExe (writeShellApplication { - name = "update-forgejo"; - runtimeInputs = [ - common-updater-scripts - coreutils - curl - jq - nix - ]; - text = '' - releases=$(curl "https://codeberg.org/api/v1/repos/forgejo/forgejo/releases?draft=false&pre-release=false&limit=1" \ - --silent \ - --header "accept: application/json") - - stable=$(jq '.[0] - | .tag_name[1:] as $version - | ("forgejo-src-\($version).tar.gz") as $filename - | { $version, html_url } + (.assets | map(select(.name | startswith($filename)) | {(.name | split(".") | last): .browser_download_url}) | add)' \ - <<< "$releases") - - archive_url=$(jq -r .gz <<< "$stable") - checksum_url=$(jq -r .sha256 <<< "$stable") - release_url=$(jq -r .html_url <<< "$stable") - version=$(jq -r .version <<< "$stable") - - if [[ "${version}" = "$version" ]]; then - echo "No new version found (already at $version)" - exit 0 - fi - - echo "Release: $release_url" - - sha256=$(curl "$checksum_url" --silent | cut --delimiter " " --fields 1) - sri_hash=$(nix hash to-sri --type sha256 "$sha256") - - update-source-version "${pname}" "$version" "$sri_hash" "$archive_url" + # Create static gzip and brotli files + find -L $out -type f -regextype posix-extended -iregex '.*\.(css|html|js|svg|ttf|txt)' \ + -exec gzip --best --keep --force {} ';' \ + -exec brotli --best --keep --no-copy-stat {} ';' ''; - }); + + tests = nixosTests.forgejo; + + updateScript = lib.getExe (writeShellApplication { + name = "update-forgejo"; + runtimeInputs = [ + common-updater-scripts + coreutils + curl + jq + nix + ]; + text = '' + releases=$(curl "https://codeberg.org/api/v1/repos/forgejo/forgejo/releases?draft=false&pre-release=false&limit=1" \ + --silent \ + --header "accept: application/json") + + stable=$(jq '.[0] + | .tag_name[1:] as $version + | ("forgejo-src-\($version).tar.gz") as $filename + | { $version, html_url } + (.assets | map(select(.name | startswith($filename)) | {(.name | split(".") | last): .browser_download_url}) | add)' \ + <<< "$releases") + + archive_url=$(jq -r .gz <<< "$stable") + checksum_url=$(jq -r .sha256 <<< "$stable") + release_url=$(jq -r .html_url <<< "$stable") + version=$(jq -r .version <<< "$stable") + + if [[ "${version}" = "$version" ]]; then + echo "No new version found (already at $version)" + exit 0 + fi + + echo "Release: $release_url" + + sha256=$(curl "$checksum_url" --silent | cut --delimiter " " --fields 1) + sri_hash=$(nix hash to-sri --type sha256 "$sha256") + + update-source-version "${pname}" "$version" "$sri_hash" "$archive_url" + ''; + }); + }; meta = with lib; { description = "A self-hosted lightweight software forge"; diff --git a/pkgs/applications/version-management/gitea/default.nix b/pkgs/applications/version-management/gitea/default.nix index a09476a20582..b7dd682e24a4 100644 --- a/pkgs/applications/version-management/gitea/default.nix +++ b/pkgs/applications/version-management/gitea/default.nix @@ -5,11 +5,15 @@ , makeWrapper , git , bash +, gitea , gzip , openssh , pam , sqliteSupport ? true , pamSupport ? true +, runCommand +, brotli +, xorg , nixosTests }: @@ -61,7 +65,21 @@ buildGoModule rec { --prefix PATH : ${lib.makeBinPath [ bash git gzip openssh ]} ''; - passthru.tests = nixosTests.gitea; + passthru = { + data-compressed = runCommand "gitea-data-compressed" { + nativeBuildInputs = [ brotli xorg.lndir ]; + } '' + mkdir $out + lndir ${gitea.data}/ $out/ + + # Create static gzip and brotli files + find -L $out -type f -regextype posix-extended -iregex '.*\.(css|html|js|svg|ttf|txt)' \ + -exec gzip --best --keep --force {} ';' \ + -exec brotli --best --keep --no-copy-stat {} ';' + ''; + + tests = nixosTests.gitea; + }; meta = with lib; { description = "Git with a cup of tea";