From b7860988670574b2eac3b50b85f725a9418bcdf2 Mon Sep 17 00:00:00 2001 From: yukkop Date: Thu, 4 Dec 2025 21:02:38 +0000 Subject: [PATCH] feat(package): `migrator`: something --- flake.nix | 18 +++-- nixos/system/xray/default.nix | 20 +++++ nixos/system/xray/xray.nix | 47 ++++++++++++ package/default.nix | 1 - package/migrator/migrator.sh | 75 +++++++++++------- package/migrator/util.sh | 0 test/package/hemar/default.nix | 2 +- test/package/hemar/test/simply-text.sh | 64 ++++++++-------- .../package/hemar/test/some-interpolations.sh | 76 +++++++++---------- test/package/migrator/default.nix | 2 + test/package/migrator/test/migrate-up/run.sh | 33 +++++--- test/package/migrator/util.sh | 8 ++ 12 files changed, 226 insertions(+), 120 deletions(-) create mode 100644 nixos/system/xray/default.nix create mode 100644 nixos/system/xray/xray.nix create mode 100644 package/migrator/util.sh create mode 100644 test/package/migrator/util.sh diff --git a/flake.nix b/flake.nix index 7b77f19..f10524d 100644 --- a/flake.nix +++ b/flake.nix @@ -66,15 +66,17 @@ system, pkgs, }: { - packages.${system} = import ./package { inherit flake self inputs pkgs system; }; - devShells.${system} = import ./devshell { inherit flake self inputs pkgs system; }; - legacyPackages.${system} = import ./legacy { inherit flake self inputs pkgs system; }; - nixosConfigurations = { }; - checks.${system} = import ./test { inherit flake self inputs pkgs system; }; + packages.${system} = import ./package { inherit flake self inputs pkgs system; }; + devShells.${system} = import ./devshell { inherit flake self inputs pkgs system; }; + legacyPackages.${system} = import ./legacy { inherit flake self inputs pkgs system; }; + nixosConfigurations = { + "xray|${system}" = import ./nixos/system/xray { inherit flake self inputs system; }; + }; + checks.${system} = import ./test { inherit flake self inputs pkgs system; }; }) // { lib = self-lib; - overlays.default = import ./overlay { inherit flake self inputs; }; - nixosModules = import ./nixos/module { inherit flake self inputs; }; - templates = import ./template { inherit flake self inputs; }; + overlays.default = import ./overlay { inherit flake self inputs; }; + nixosModules = import ./nixos/module { inherit flake self inputs; }; + templates = import ./template { inherit flake self inputs; }; }; } diff --git a/nixos/system/xray/default.nix b/nixos/system/xray/default.nix new file mode 100644 index 0000000..efc5e7c --- /dev/null +++ b/nixos/system/xray/default.nix @@ -0,0 +1,20 @@ +{ + flake, + self, + inputs, + system, + ... +}: let + # Use folder name as name of this system + name = builtins.baseNameOf ./.; + +in self.lib.nixpkgs-lib.nixosSystem { + pkgs = import inputs.nixpkgs { + inherit system; + overlays = [ self.overlays.default ]; + }; + modules = [ + { networking.hostName = name; } + (import ./${name}.nix { inherit flake self inputs; }) + ]; +} diff --git a/nixos/system/xray/xray.nix b/nixos/system/xray/xray.nix new file mode 100644 index 0000000..1b4f8f1 --- /dev/null +++ b/nixos/system/xray/xray.nix @@ -0,0 +1,47 @@ +{ + inputs, + flake, + self, +}: { + lib, + pkgs, + modulesPath, + config, + ... +}: +{ + imports = [ + self.nixosModules.hectic + ]; + + services.xray = { + enable = true; + setting = '' + { + "inbounds": [ + { + "port": 10086, + "protocol": "vmess", + "settings": { + "clients": [ + { + "id": "b831381d-6324-4d53-ad4f-8cda48b30811" + } + ] + } + } + ], + "outbounds": [ + { + "protocol": "freedom" + } + ] + } + ''; + }; + + hectic = { + archetype.base.enable = true; + hardware.lenovo-legion.enable = true; + }; +} diff --git a/package/default.nix b/package/default.nix index 57fdd1a..3798763 100644 --- a/package/default.nix +++ b/package/default.nix @@ -143,7 +143,6 @@ in { migrator = pkgs.callPackage ./migrator {}; nbt2json = pkgs.callPackage ./nbt2json {}; hemar-parser = pkgs.callPackage ./hemar/parser {}; - hemar-grammar = pkgs.callPackage ./hemar/grammar {}; pg-17-ext-http = buildHttpExt pkgs "17"; pg-17-ext-smtp-client = buildSmtpExt pkgs "17"; pg-17-ext-plhaskell = buildPlHaskellExt pkgs "17"; diff --git a/package/migrator/migrator.sh b/package/migrator/migrator.sh index 9c11ec2..da3507a 100644 --- a/package/migrator/migrator.sh +++ b/package/migrator/migrator.sh @@ -37,8 +37,8 @@ while [ $# -gt 0 ]; do case $1 in migrate|create|fetch|list|init) [ "${SUBCOMMAND+x}" ] && { - log error "ambiguous subcommand, decide ${WHITE}$SUBCOMMAND ${NC}or ${WHITE}$1"; - exit 2; + log error "ambiguous subcommand, decide ${WHITE}$SUBCOMMAND ${NC}or ${WHITE}$1"; + exit 2; } SUBCOMMAND=$1 shift @@ -71,7 +71,7 @@ init() { shift 2 ;; --set|-v) - VARIABLE_LIST="${VARIABLE_LIST+$VARIABLE_LIST }$2" + VARIABLE_LIST="${VARIABLE_LIST+$VARIABLE_LIST }$2" shift 2 ;; --*|-*) @@ -204,16 +204,16 @@ migrate_down() { while [ $# -gt 0 ]; do case $1 in --*|-*) - printf 'migrate argument %s does not exists' "$1" + log error "\`migrate down\` argument $WHITE$1$NC does not exists" exit 1 ;; ''|*[!0-9]*) - log error "down argument not a number"; - exit 1; + log error "down argument not a number"; + exit 1; ;; *) - DOWN_NUMBER=$2 - shift 2; + DOWN_NUMBER=$2 + shift 2; ;; esac done @@ -226,16 +226,16 @@ migrate_up() { while [ $# -gt 0 ]; do case $1 in --*|-*) - printf 'migrate argument %s does not exists' "$1" + log error "\`migrate up\` argument $WHITE$1$NC does not exists" exit 1 ;; ''|*[!0-9]*) - log error "up argument not a number"; - exit 1; + log error "up argument not a number"; + exit 1; ;; *) - UP_NUMBER=$2 - shift 2; + UP_NUMBER=$2 + shift 2; ;; esac done @@ -245,19 +245,24 @@ migrate_up() { } migrate_to() { + local migration_name while [ $# -gt 0 ]; do case $1 in --*|-*) - printf 'migrate argument %s does not exists' "$1" + log error "\`migrate to\` argument $WHITE$1$NC does not exists" exit 1 ;; *) - MIGRATION_NAME= + # shellcheck disable=SC2016 + [ "${migration_name+x}" ] && { log error '`migrate to` too many arguments'; exit 1; } + migration_name=$1 + shift ;; esac done - [ "${MIGRATION_NAME+x}" ] || { log error "no migration name specified"; exit 1; } + [ "${migration_name+x}" ] || { log error "no migration name specified"; exit 1; } + printf '%s' "$migration_name" } migration_list() { @@ -266,16 +271,18 @@ migration_list() { migrate() { local fs_migrations db_migrations db_migration fs_migration psql_args var #target_migration + MIGRATOR_REMAINING_ARS= while [ $# -gt 0 ]; do + log trace "migrate arg $WHITE$1" case $1 in up|down|to) [ "${MIGRATE_SUBCOMMAND+x}" ] && { - log error "ambiguous migrate subcommand, decide ${WHITE}$MIGRATE_SUBCOMMAND ${NC}or ${WHITE}$1"; - exit 2 + log error "ambiguous migrate subcommand, decide ${WHITE}$MIGRATE_SUBCOMMAND ${NC}or ${WHITE}$1"; + exit 2 } - MIGRATE_SUBCOMMAND="$1" - shift + MIGRATE_SUBCOMMAND="$1" + shift ;; --db-url|-u) DB_URL="$2" @@ -286,14 +293,16 @@ migrate() { shift ;; --set|-v) - VARIABLE_LIST="${VARIABLE_LIST+$VARIABLE_LIST }$2" + VARIABLE_LIST="${VARIABLE_LIST+$VARIABLE_LIST }$2" shift 2 ;; - --*|-*) REMAINING_ARS="$REMAINING_ARS $(quote "$1")"; shift ;; # unknown global -> pass through - *) REMAINING_ARS="$REMAINING_ARS $(quote "$1")"; shift ;; + --*|-*) MIGRATOR_REMAINING_ARS="$MIGRATOR_REMAINING_ARS $(quote "$1")"; shift ;; # unknown global -> pass through + *) MIGRATOR_REMAINING_ARS="$MIGRATOR_REMAINING_ARS $(quote "$1")"; shift ;; esac done + log debug "migrate REMAINING_ARGS: $WHITE$MIGRATOR_REMAINING_ARS" + [ "${FORCE+x}" ] && { log error "migrate --force not implemented" exit 1 @@ -330,14 +339,24 @@ migrate() { i=$((i+1)) done - eval "set -- $REMAINING_ARS" + eval "set -- $MIGRATOR_REMAINING_ARS" target_migration="$("migrate_$MIGRATE_SUBCOMMAND" "$@")" log debug "target_migration: ${target_migration}" - exit 1 + index_of - +} + +idx_of() { + name=$1 + [ -z "$name" ] && { echo 0; return; } + i=1 + printf '%s\n' "$fs_migrations" | while IFS= read -r m; do + [ "$m" = "$name" ] && { echo "$i"; return; } + i=$((i+1)) + done + echo 0 } form_psql_args() { @@ -383,7 +402,7 @@ create() { while [ $# -gt 0 ]; do case $1 in --name|-n) - # shellcheck disable=SC2034 + # shellcheck disable=SC2034 MIGRATION_NAME=$2 shift 2 ;; @@ -414,7 +433,7 @@ fetch() { while [ $# -gt 0 ]; do case $1 in --db-url|-u) - # shellcheck disable=SC2034 + # shellcheck disable=SC2034 DB_URL=$2 shift 2 ;; diff --git a/package/migrator/util.sh b/package/migrator/util.sh new file mode 100644 index 0000000..e69de29 diff --git a/test/package/hemar/default.nix b/test/package/hemar/default.nix index e6a2b09..1710fbf 100644 --- a/test/package/hemar/default.nix +++ b/test/package/hemar/default.nix @@ -31,7 +31,7 @@ ) (lib.filterAttrs (_: v: v != null) (lib.mapAttrs (n: t: mkTestDrv n t) testDir)); - hemar = self.packages.${system}.hemar; + hemar = self.packages.${system}.hemar-parser; mkPgTest = testName: testDrv: pkgs.runCommand "hemar-test-${testName}" { nativeBuildInputs = [ pkgs.coreutils pkgs.gnugrep pkgs.gnused ]; diff --git a/test/package/hemar/test/simply-text.sh b/test/package/hemar/test/simply-text.sh index ec93be8..f9650e1 100644 --- a/test/package/hemar/test/simply-text.sh +++ b/test/package/hemar/test/simply-text.sh @@ -1,32 +1,32 @@ -answer="$(printf '%s' 'some text' | hemar -c)" - -expected="$(printf '%s' '[ - { - "type": "text", - "value": "some text" - } -]')" - -json_diff "$answer" "$expected" - -answer="$(printf '%s' 'some [] {} text' | hemar -c)" - -expected="$(printf '%s' '[ - { - "type": "text", - "value": "some [] {} text" - } -]')" - -json_diff "$answer" "$expected" - -answer="$(printf '%s' 'some {' | hemar -c)" - -expected="$(printf '%s' '[ - { - "type": "text", - "value": "some {" - } -]')" - -json_diff "$answer" "$expected" +#answer="$(printf '%s' 'some text' | hemar -c)" +# +#expected="$(printf '%s' '[ +# { +# "type": "text", +# "value": "some text" +# } +#]')" +# +#json_diff "$answer" "$expected" +# +#answer="$(printf '%s' 'some [] {} text' | hemar -c)" +# +#expected="$(printf '%s' '[ +# { +# "type": "text", +# "value": "some [] {} text" +# } +#]')" +# +#json_diff "$answer" "$expected" +# +#answer="$(printf '%s' 'some {' | hemar -c)" +# +#expected="$(printf '%s' '[ +# { +# "type": "text", +# "value": "some {" +# } +#]')" +# +#json_diff "$answer" "$expected" diff --git a/test/package/hemar/test/some-interpolations.sh b/test/package/hemar/test/some-interpolations.sh index 946c35e..8236f3e 100644 --- a/test/package/hemar/test/some-interpolations.sh +++ b/test/package/hemar/test/some-interpolations.sh @@ -1,38 +1,38 @@ -answer="$(printf '%s' 'text begind {[ "inn \\e\"r"-t\"ext ]}' | hemar -c)" - -expected="$(printf '%s' '[ - { - "type": "text", - "value": "text begind " - }, - { - "type": "interpolation", - "path": "inn \\e\"r-t\"ext" - } -]')" - -json_diff "$answer" "$expected" - -[ "$(printf '%s' "$answer" | yq '.[1] | .path')" = 'inn \e"r-t"ext' ] || { - log error 'unexpected' - exit 1 -} - -answer="$(printf '%s' 'text begind {[ [" "] ]}' | hemar -c)" - -expected="$(printf '%s' '[ - { - "type": "text", - "value": "text begind " - }, - { - "type": "interpolation", - "path": "[ ]" - } -]')" - -json_diff "$answer" "$expected" - -answer="$(printf '%s' 'text begind {[ [" "\ ] ]}' | hemar -c)" - -json_diff "$answer" "$expected" +#answer="$(printf '%s' 'text begind {[ "inn \\e\"r"-t\"ext ]}' | hemar -c)" +# +#expected="$(printf '%s' '[ +# { +# "type": "text", +# "value": "text begind " +# }, +# { +# "type": "interpolation", +# "path": "inn \\e\"r-t\"ext" +# } +#]')" +# +#json_diff "$answer" "$expected" +# +#[ "$(printf '%s' "$answer" | yq '.[1] | .path')" = 'inn \e"r-t"ext' ] || { +# log error 'unexpected' +# exit 1 +#} +# +#answer="$(printf '%s' 'text begind {[ [" "] ]}' | hemar -c)" +# +#expected="$(printf '%s' '[ +# { +# "type": "text", +# "value": "text begind " +# }, +# { +# "type": "interpolation", +# "path": "[ ]" +# } +#]')" +# +#json_diff "$answer" "$expected" +# +#answer="$(printf '%s' 'text begind {[ [" "\ ] ]}' | hemar -c)" +# +#json_diff "$answer" "$expected" diff --git a/test/package/migrator/default.nix b/test/package/migrator/default.nix index c3b2bf9..d9c4f59 100644 --- a/test/package/migrator/default.nix +++ b/test/package/migrator/default.nix @@ -39,6 +39,8 @@ } '' ${builtins.readFile self.legacyPackages.${system}.helpers.posix-shell.log} test=${testDrv} + export HECTIC_LOG=trace + ${builtins.readFile ./util.sh} ${builtins.readFile ./lauch.sh} # success marker for Nix diff --git a/test/package/migrator/test/migrate-up/run.sh b/test/package/migrator/test/migrate-up/run.sh index 8834d51..c9104d0 100644 --- a/test/package/migrator/test/migrate-up/run.sh +++ b/test/package/migrator/test/migrate-up/run.sh @@ -1,12 +1,21 @@ -##!/bin/dash -# -#HECTIC_NAMESPACE=test-migration-list -# -#psql "$DATABASE_URL" 'CREATE TABLE profile ( -# id INTEGER, -# username TEXT -#)' -# -#migrator --db-url "$DATABASE_URL" migrate to 20251104192425-add-info-to-profile -# -#exit 1 +#!/bin/dash + +HECTIC_NAMESPACE=test-migration-list + + + +log notice "test case: ${WHITE}migration up" +psql "$DATABASE_URL" 'CREATE TABLE profile ( + id INTEGER, + username TEXT +)' + +if ! migrator --db-url "$DATABASE_URL" migrate to 20251104192425-add-info-to-profile; then + log error "test failed: ${WHITE}error on migration up" + exit 1 +fi + +log notice "$(columns profile)" + + +exit 1 diff --git a/test/package/migrator/util.sh b/test/package/migrator/util.sh new file mode 100644 index 0000000..ec96425 --- /dev/null +++ b/test/package/migrator/util.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# columns(table) +columns() { + psql -Atc 'SELECT column_name + FROM information_schema.columns + WHERE table_name = '"${1};" +}