diff --git a/.gitignore b/.gitignore index c07d5f6..056dbb2 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,4 @@ !.gitignore !github2forgejo -!*.lock !*.md -!*.nix diff --git a/README.md b/README.md index f42e06b..1a17f27 100644 --- a/README.md +++ b/README.md @@ -6,41 +6,6 @@ Plain simple, just install [Nushell](https://nushell.sh) and run the script: ./github2forgejo --help ``` -
-Help Output - -``` -Migrates a GitHub users repositories to a Forgejo instance. - -Accepted environment variables: - - GITHUB_USER: The user to fetch the repositories from. - GITHUB_TOKEN: An access token for fetching private repositories. Optional. - - FORGEJO_URL: The URL to the Forgejo instance. Must include the protocol (https://). - FORGEJO_USER: The user to migrate the repositories to. - FORGEJO_TOKEN: An access token for the specified user. - - STRATEGY: - The strategy. Valid options are "mirrored" or "cloned" (case insensitive). - "mirrored" will mirror the repository and tell the Forgejo instance to - periodically update it, "cloned" will only clone once. "cloned" is - useful if you are never going to use GitHub again. - - FORCE_SYNC: - Whether to delete a mirrored repo from the Forgejo instance if the - source on GitHub doesn't exist anymore. Must be either "true" or "false". - -To leave an environment variable unspecified, set it to an empty string. - -Usage: - > github2forgejo - -Flags: - -h, --help - Display the help message for this command -``` -
- You can either specify all the environment variables for a uninteractive run, or run the script like so: @@ -52,69 +17,6 @@ And get a nice interactive experience. This works on any Forgejo instance. -You can also set up a systemd service and timer to run every once in a while. - -Use the flake, like so: - -```nix -{ - inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - - github2forgejo = { - url = "github:RGBCube/GitHub2Forgejo"; - - inputs.nixpkgs.follows = "nixpkgs"; - }; - }; - - outputs = { nixpkgs, github2forgejo, ... }: let inherit (nixpkgs) lib; in { - nixosConfigurations.myserver = lib.nixosSystem { - modules = [ - github2forgejo.nixosModules.default - - { - nixpkgs.overlays = [ github2forgejo.overlays.default ]; - - services.github2forgejo = { - enable = true; - - # Something along the lines of: - # - # GITHUB_USER="RGBCube" - # GITHUB_TOKEN="ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" - # FORGEJO_URL="https://git.rgbcu.be/" - # FORGEJO_USER="RGBCube" - # FORGEJO_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" - # STRATEGY="mirrored" - # FORCE_SYNC="true" - # - # Do `GITHUB_TOKEN=""` if you want to only mirror public repositories of a person. - # You HAVE TO set each one of these. Leaving one unset will make the systemd unit fail! - environmentFile = "/secrets/github2forgejo.env"; - - # The default runs every day at midnight. But you can override it like so: - # - # timerConfig = { - # OnCalendar = "00:05"; - # RandomizedDelaySec = "5h"; - # Persistent = true; - # }; - # - # Or you can disable the timer by setting `timerConfig` to null: - # - # timerConfig = null; - } - } - ]; - } - }; -} -``` - -The script is also available as a package, you just need to use the -`packages..default` or `packages..github2forgejo` outputs. - ## FAQ ### What is the difference between mirroring and cloning? diff --git a/flake.lock b/flake.lock deleted file mode 100644 index 1383f19..0000000 --- a/flake.lock +++ /dev/null @@ -1,43 +0,0 @@ -{ - "nodes": { - "nixpkgs": { - "locked": { - "lastModified": 1716715802, - "narHash": "sha256-usk0vE7VlxPX8jOavrtpOqphdfqEQpf9lgedlY/r66c=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "e2dd4e18cc1c7314e24154331bae07df76eb582f", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "nixpkgs": "nixpkgs", - "systems": "systems" - } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/flake.nix b/flake.nix deleted file mode 100644 index 7f8752c..0000000 --- a/flake.nix +++ /dev/null @@ -1,115 +0,0 @@ -{ - description = "GitHub to Forgejo migration script"; - - inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; - - systems.url = "github:nix-systems/default"; - }; - - outputs = { self, nixpkgs, systems }: let - inherit (nixpkgs) lib; - - eachSystem = lib.genAttrs (import systems); - in { - packages = eachSystem (system: let pkgs = import nixpkgs { inherit system; }; in rec { - inherit (self.overlays.github2forgejo pkgs pkgs) github2forgejo; - - default = github2forgejo; - }); - - overlays = rec { - default = github2forgejo; - github2forgejo = (final: super: { - github2forgejo = super.callPackage ./package.nix {}; - }); - }; - - nixosModules = rec { - default = github2forgejo; - github2forgejo = { config, utils, lib, pkgs, ... }: let - cfg = config.services.github2forgejo; - in { - options.services.github2forgejo = { - enable = lib.mkEnableOption (lib.mdDoc "the github2forgejo timer"); - package = lib.mkPackageOption pkgs "github2forgejo" {}; - - environmentFile = lib.mkOption { - type = lib.types.path; - default = null; - description = lib.mdDoc '' - File containing environment variables required by GitHub2Forgejo, - in the format of an EnvironmentFile as described by {manpage}`systemd.exec(5)`. - - You must set ALL of these environment variables: - - GITHUB_USER: The user to fetch the repositories from. - GITHUB_TOKEN: An access token for fetching private repositories. Optional. - - FORGEJO_URL: The URL to the Forgejo instance. Must include the protocol (https://). - FORGEJO_USER: The user to migrate the repositories to. - FORGEJO_TOKEN: An access token for the specified user. - - STRATEGY: - The strategy. Valid options are "mirrored" or "cloned" (case insensitive). - "mirrored" will mirror the repository and tell the Forgejo instance to - periodically update it, "cloned" will only clone once. "cloned" is - useful if you are never going to use GitHub again. - - FORCE_SYNC: - Whether to delete a mirrored repo from the Forgejo instance if the - source on GitHub doesn't exist anymore. Must be either "true" or "false". - - You must set an environment variable to an empty string to leave it "unset". - ''; - - example = "/secrets/github2forgejo.env"; - }; - - timerConfig = lib.mkOption { - type = with lib.types; nullOr (attrsOf utils.systemdUtils.unitOptions.unitOption); - default = { - OnCalendar = "daily"; - Persistent = true; - }; - - description = lib.mdDoc '' - When to run the script. See {manpage}`systemd.timer(5)` for - details. If null, no timer will be created and the script - will only run when explicitly started. - ''; - - example = { - OnCalendar = "00:05"; - RandomizedDelaySec = "5h"; - Persistent = true; - }; - }; - }; - - config = lib.mkIf cfg.enable { - systemd.services.github2forgejo = { - wants = [ "network-online.target" ]; - after = [ "network-online.target" ]; - restartIfChanged = false; - - serviceConfig = { - Type = "oneshot"; - ExecStart = lib.getExe cfg.package; - - User = "github2forgejo"; - DynamicUser = true; - - EnvironmentFile = cfg.environmentFile; - }; - }; - - systemd.timers.github2forgejo = lib.mkIf (cfg.timerConfig != null) { - wantedBy = [ "timers.target" ]; - timerConfig = cfg.timerConfig; - }; - }; - }; - }; - }; -} diff --git a/package.nix b/package.nix deleted file mode 100644 index 128ec13..0000000 --- a/package.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ - lib, - stdenvNoCC, - - nushell, -}: - -stdenvNoCC.mkDerivation { - name = "github2forgejo"; - version = "master"; - - src = ./.; - - dontBuild = true; - dontConfigure = true; - - nativeBuildInputs = [ nushell ]; - - installPhase = '' - runHook preInstall - - mkdir -p $out/bin - cp github2forgejo $out/bin - - runHook postInstall - ''; - - fixupPhase = '' - runHook preFixup - - substituteInPlace $out/bin/github2forgejo \ - --replace '/usr/bin/env nu' '${nushell}/bin/nu' - - runHook postFixup - ''; - - meta = with lib; { - description = "GitHub to Forgejo migration script"; - homepage = "https://git.rgbcu.be/RGBCube/GitHub2Forgejo"; - license = licenses.gpl3Only; - maintainers = with maintainers; [ RGBCube ]; - }; -}