Commit 3ae9f673 authored by IndeedNotJames's avatar IndeedNotJames Committed by pennae
Browse files

forgejo: add `passthru.updateScript`



also add `meta.mainProgram`, since the resulting binary
is (currently?) called `gitea` not `forgejo`

Co-authored-by: default avatarColin Arnott <urandom2@users.noreply.github.com>
parent 8030c645
Loading
Loading
Loading
Loading
+52 −6
Original line number Diff line number Diff line
{ lib
, stdenv
{ bash
, buildGoModule
, common-updater-scripts
, coreutils
, curl
, fetchurl
, makeWrapper
, git
, bash
, openssh
, gzip
, jq
, lib
, makeWrapper
, nix
, openssh
, pam
, pamSupport ? true
, sqliteSupport ? true
, stdenv
, writeShellApplication
}:

buildGoModule rec {
@@ -59,12 +65,52 @@ buildGoModule rec {
      --prefix PATH : ${lib.makeBinPath [ bash git gzip openssh ]}
  '';

  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"
    '';
  });

  meta = with lib; {
    description = "A self-hosted lightweight software forge";
    homepage = "https://forgejo.org";
    changelog = "https://codeberg.org/forgejo/forgejo/releases/tag/v${version}";
    license = licenses.mit;
    maintainers = with maintainers; [ urandom ];
    maintainers = with maintainers; [ indeednotjames urandom ];
    broken = stdenv.isDarwin;
    mainProgram = "gitea";
  };
}