mirror of
https://github.com/daylinmorgan/oizys.git
synced 2024-12-22 14:20:44 -06:00
Compare commits
8 commits
198cc73788
...
1c08f70d8e
Author | SHA1 | Date | |
---|---|---|---|
|
1c08f70d8e | ||
36458fe994 | |||
5fd09508f4 | |||
2a492684c2 | |||
149c74b3d9 | |||
9624d9a4f3 | |||
3499471751 | |||
536d84d875 |
12 changed files with 184 additions and 65 deletions
20
.github/workflows/build.yml
vendored
20
.github/workflows/build.yml
vendored
|
@ -30,6 +30,13 @@ jobs:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
# needed to access ghostty repo for now
|
||||||
|
- name: Setup SSH
|
||||||
|
uses: MrSquaare/ssh-setup-action@v3
|
||||||
|
with:
|
||||||
|
host: github.com
|
||||||
|
private-key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||||
|
|
||||||
- uses: ./.github/actions/clean-disk
|
- uses: ./.github/actions/clean-disk
|
||||||
with:
|
with:
|
||||||
purge-packages: 'true'
|
purge-packages: 'true'
|
||||||
|
@ -43,10 +50,15 @@ jobs:
|
||||||
|
|
||||||
- uses: DeterminateSystems/magic-nix-cache-action@v8
|
- uses: DeterminateSystems/magic-nix-cache-action@v8
|
||||||
|
|
||||||
- uses: cachix/cachix-action@v15
|
# - name: Install and login to attic cache
|
||||||
with:
|
# run: |
|
||||||
name: daylin
|
# nix profile install "nixpkgs#attic-client"
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
# attic login oizys https://attic.dayl.in "${{ secrets.ATTIC_TOKEN }}"
|
||||||
|
|
||||||
|
# - uses: cachix/cachix-action@v15
|
||||||
|
# with:
|
||||||
|
# name: daylin
|
||||||
|
# authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
|
||||||
- name: write lock file
|
- name: write lock file
|
||||||
if: "${{ inputs.lockFile != '' }}"
|
if: "${{ inputs.lockFile != '' }}"
|
||||||
|
|
10
.github/workflows/update.yml
vendored
10
.github/workflows/update.yml
vendored
|
@ -20,8 +20,9 @@ jobs:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
# needed to access ghostty repo for now
|
||||||
- name: Setup SSH
|
- name: Setup SSH
|
||||||
uses: MrSquaare/ssh-setup-action@v1
|
uses: MrSquaare/ssh-setup-action@v3
|
||||||
with:
|
with:
|
||||||
host: github.com
|
host: github.com
|
||||||
private-key: ${{ secrets.SSH_PRIVATE_KEY }}
|
private-key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||||
|
@ -38,7 +39,6 @@ jobs:
|
||||||
experimental-features = pipe-operator
|
experimental-features = pipe-operator
|
||||||
accept-flake-config = true
|
accept-flake-config = true
|
||||||
|
|
||||||
|
|
||||||
- name: Install and login to attic cache
|
- name: Install and login to attic cache
|
||||||
run: |
|
run: |
|
||||||
nix profile install "nixpkgs#attic-client"
|
nix profile install "nixpkgs#attic-client"
|
||||||
|
@ -92,6 +92,12 @@ jobs:
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup SSH
|
||||||
|
uses: MrSquaare/ssh-setup-action@v3
|
||||||
|
with:
|
||||||
|
host: github.com
|
||||||
|
private-key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||||
|
|
||||||
- uses: DeterminateSystems/nix-installer-action@v14
|
- uses: DeterminateSystems/nix-installer-action@v14
|
||||||
with:
|
with:
|
||||||
source-url: https://install.lix.systems/lix/lix-installer-x86_64-linux
|
source-url: https://install.lix.systems/lix/lix-installer-x86_64-linux
|
||||||
|
|
31
flake.lock
31
flake.lock
|
@ -585,38 +585,36 @@
|
||||||
"lix": {
|
"lix": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1730328739,
|
"lastModified": 1729298361,
|
||||||
"narHash": "sha256-qs7u2nCwfEV93SKV1QSikOwRbHDEA1CWYZiVKI9Hhxk=",
|
"narHash": "sha256-hiGtfzxFkDc9TSYsb96Whg0vnqBVV7CUxyscZNhed0U=",
|
||||||
"rev": "beb193d1e2121cdbd51e8309572522ee9a841395",
|
"rev": "ad9d06f7838a25beec425ff406fe68721fef73be",
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/beb193d1e2121cdbd51e8309572522ee9a841395.tar.gz?rev=beb193d1e2121cdbd51e8309572522ee9a841395"
|
"url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/ad9d06f7838a25beec425ff406fe68721fef73be.tar.gz?rev=ad9d06f7838a25beec425ff406fe68721fef73be"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://git.lix.systems/lix-project/lix/archive/main.tar.gz"
|
"url": "https://git.lix.systems/lix-project/lix/archive/2.91.1.tar.gz"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lix-module": {
|
"lix-module": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": "flake-utils_2",
|
"flake-utils": "flake-utils_2",
|
||||||
"flakey-profile": "flakey-profile",
|
"flakey-profile": "flakey-profile",
|
||||||
"lix": [
|
"lix": "lix",
|
||||||
"lix"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1727752861,
|
"lastModified": 1729360442,
|
||||||
"narHash": "sha256-jowmo2aEzrEpPSM96IWtajuogdJm7DjAWxFTEb7Ct0s=",
|
"narHash": "sha256-6U0CyPycIBc04hbYy2hBINnVso58n/ZyywY2BD3hu+s=",
|
||||||
"rev": "fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d",
|
"rev": "9098ac95768f7006d7e070b88bae76939f6034e6",
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d.tar.gz?rev=fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d"
|
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/9098ac95768f7006d7e070b88bae76939f6034e6.tar.gz?rev=9098ac95768f7006d7e070b88bae76939f6034e6"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz"
|
"url": "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-1.tar.gz"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"my-nixpkgs": {
|
"my-nixpkgs": {
|
||||||
|
@ -925,11 +923,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_4": {
|
"nixpkgs_4": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1729880355,
|
"lastModified": 1730531603,
|
||||||
"narHash": "sha256-RP+OQ6koQQLX5nw0NmcDrzvGL8HDLnyXt/jHhL1jwjM=",
|
"narHash": "sha256-Dqg6si5CqIzm87sp57j5nTaeBbWhHFaVyG7V6L8k3lY=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "18536bf04cd71abd345f9579158841376fdd0c5a",
|
"rev": "7ffd9ae656aec493492b44d0ddfb28e79a1ea25d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -1078,7 +1076,6 @@
|
||||||
"hyprland": "hyprland",
|
"hyprland": "hyprland",
|
||||||
"hyprland-contrib": "hyprland-contrib",
|
"hyprland-contrib": "hyprland-contrib",
|
||||||
"hyprman": "hyprman",
|
"hyprman": "hyprman",
|
||||||
"lix": "lix",
|
|
||||||
"lix-module": "lix-module",
|
"lix-module": "lix-module",
|
||||||
"my-nixpkgs": "my-nixpkgs",
|
"my-nixpkgs": "my-nixpkgs",
|
||||||
"nim2nix": "nim2nix_2",
|
"nim2nix": "nim2nix_2",
|
||||||
|
|
17
flake.nix
17
flake.nix
|
@ -12,14 +12,19 @@
|
||||||
nixos-wsl.url = "github:nix-community/NixOS-WSL";
|
nixos-wsl.url = "github:nix-community/NixOS-WSL";
|
||||||
nix-index-database.url = "github:nix-community/nix-index-database";
|
nix-index-database.url = "github:nix-community/nix-index-database";
|
||||||
|
|
||||||
lix = {
|
# lix = {
|
||||||
url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz";
|
# url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz";
|
||||||
flake = false;
|
# flake = false;
|
||||||
};
|
# };
|
||||||
|
# lix-module = {
|
||||||
|
# url = "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz";
|
||||||
|
# inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
# inputs.lix.follows = "lix";
|
||||||
|
# };
|
||||||
|
|
||||||
lix-module = {
|
lix-module = {
|
||||||
url = "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz";
|
url = "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-1.tar.gz";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
inputs.lix.follows = "lix";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# https://github.com/ghostty-org/ghostty/issues/2025
|
# https://github.com/ghostty-org/ghostty/issues/2025
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
|> listify;
|
|> listify;
|
||||||
}
|
}
|
||||||
// (
|
// (
|
||||||
|
# llm
|
||||||
''
|
''
|
||||||
vpn|desktop|hyprland|chrome
|
vpn|desktop|hyprland|chrome
|
||||||
backups|hp-scanner|llm
|
backups|hp-scanner|llm
|
||||||
|
|
|
@ -2,22 +2,18 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
mkOizysModule,
|
mkOizysModule,
|
||||||
# enabled,
|
flake,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
|
||||||
inherit (pkgs) python3Packages;
|
|
||||||
# llm-ollama = python3Packages.callPackage ./llm-plugins/llm-ollama { };
|
|
||||||
llm-claude3 = python3Packages.callPackage ./llm-plugins/llm-claude-3 { };
|
|
||||||
in
|
|
||||||
|
|
||||||
mkOizysModule config "llm" {
|
mkOizysModule config "llm" {
|
||||||
# services.ollama = enabled;
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
(python3.withPackages (ps: [
|
(python3.withPackages (ps:
|
||||||
ps.llm
|
with (flake.pkgs "self");
|
||||||
llm-claude3
|
[
|
||||||
]))
|
llm
|
||||||
|
llm-claude-3
|
||||||
|
]
|
||||||
|
))
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
|
let inherit (pkgs) python3Packages;
|
||||||
|
in
|
||||||
{
|
{
|
||||||
nph = pkgs.callPackage ./nim/nph { }; # doesn't compile with 2.2.0 :/
|
nph = pkgs.callPackage ./nim/nph { }; # doesn't compile with 2.2.0 :/
|
||||||
nimlangserver = pkgs.callPackage ./nim/nimlangserver { };
|
nimlangserver = pkgs.callPackage ./nim/nimlangserver { };
|
||||||
nimble = pkgs.callPackage ./nim/nimble { };
|
nimble = pkgs.callPackage ./nim/nimble { };
|
||||||
distrobox = pkgs.callPackage ./distrobox {};
|
distrobox = pkgs.callPackage ./distrobox {};
|
||||||
|
llm = python3Packages.callPackage ./llm {};
|
||||||
|
llm-claude-3 = python3Packages.callPackage ./llm-plugins/llm-claude-3 {};
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
buildPythonPackage rec {
|
buildPythonPackage rec {
|
||||||
pname = "llm-claude-3";
|
pname = "llm-claude-3";
|
||||||
version = "0.4";
|
version = "0.7";
|
||||||
pyproject = true;
|
pyproject = true;
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
96
pkgs/llm/default.nix
Normal file
96
pkgs/llm/default.nix
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
pytestCheckHook,
|
||||||
|
pythonOlder,
|
||||||
|
setuptools,
|
||||||
|
click-default-group,
|
||||||
|
numpy,
|
||||||
|
openai,
|
||||||
|
pip,
|
||||||
|
pluggy,
|
||||||
|
pydantic,
|
||||||
|
python-ulid,
|
||||||
|
pyyaml,
|
||||||
|
sqlite-migrate,
|
||||||
|
cogapp,
|
||||||
|
pytest-httpx,
|
||||||
|
puremagic,
|
||||||
|
sqlite-utils,
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
llm = buildPythonPackage rec {
|
||||||
|
pname = "llm";
|
||||||
|
version = "0.17.1";
|
||||||
|
pyproject = true;
|
||||||
|
|
||||||
|
build-system = [ setuptools ];
|
||||||
|
|
||||||
|
disabled = pythonOlder "3.8";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "simonw";
|
||||||
|
repo = "llm";
|
||||||
|
rev = "refs/tags/${version}";
|
||||||
|
hash = "sha256-6OO0SIIxChM5HRJoUM4CYGbsINmc3i+iyL/oahLHhrY=";
|
||||||
|
};
|
||||||
|
|
||||||
|
# patches = [ ./001-disable-install-uninstall-commands.patch ];
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
click-default-group
|
||||||
|
numpy
|
||||||
|
openai
|
||||||
|
pip
|
||||||
|
pluggy
|
||||||
|
pydantic
|
||||||
|
python-ulid
|
||||||
|
pyyaml
|
||||||
|
setuptools # for pkg_resources
|
||||||
|
sqlite-migrate
|
||||||
|
sqlite-utils
|
||||||
|
puremagic
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeCheckInputs = [
|
||||||
|
cogapp
|
||||||
|
numpy
|
||||||
|
pytest-httpx
|
||||||
|
pytestCheckHook
|
||||||
|
];
|
||||||
|
|
||||||
|
doCheck = true;
|
||||||
|
|
||||||
|
pytestFlagsArray = [
|
||||||
|
"-svv"
|
||||||
|
"tests/"
|
||||||
|
];
|
||||||
|
|
||||||
|
pythonImportsCheck = [ "llm" ];
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
inherit withPlugins;
|
||||||
|
};
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
homepage = "https://github.com/simonw/llm";
|
||||||
|
description = "Access large language models from the command-line";
|
||||||
|
changelog = "https://github.com/simonw/llm/releases/tag/${version}";
|
||||||
|
license = licenses.asl20;
|
||||||
|
mainProgram = "llm";
|
||||||
|
maintainers = with maintainers; [
|
||||||
|
aldoborrero
|
||||||
|
mccartykim
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
withPlugins = throw ''
|
||||||
|
llm.withPlugins was confusing to use and has been removed.
|
||||||
|
Please migrate to using python3.withPackages(ps: [ ps.llm ]) instead.
|
||||||
|
|
||||||
|
See https://nixos.org/manual/nixpkgs/stable/#python.withpackages-function for more usage examples.
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
llm
|
|
@ -136,6 +136,12 @@ proc evaluateDerivations(drvs: seq[string]): Table[string, NixDerivation] =
|
||||||
runCmdCaptWithSpinner(cmd, "evaluating derivations")
|
runCmdCaptWithSpinner(cmd, "evaluating derivations")
|
||||||
fromJson(output, Table[string, NixDerivation])
|
fromJson(output, Table[string, NixDerivation])
|
||||||
|
|
||||||
|
proc nixDerivationShow(drvs: seq[string]): Table[string, NixDerivation] =
|
||||||
|
var cmd = "nix derivation show"
|
||||||
|
cmd.addArgs drvs
|
||||||
|
let (output, _ ) =
|
||||||
|
runCmdCaptWithSpinner(cmd, "evaluating " & drvs.join(" "))
|
||||||
|
fromJson(output, Table[string, NixDerivation])
|
||||||
|
|
||||||
# TODO: replace asserts in this proc, would be easier with results type
|
# TODO: replace asserts in this proc, would be easier with results type
|
||||||
proc findSystemPaths(drvs: Table[string, NixDerivation]): seq[string] =
|
proc findSystemPaths(drvs: Table[string, NixDerivation]): seq[string] =
|
||||||
|
@ -172,33 +178,37 @@ func isIgnored(drv: string): bool =
|
||||||
if name.startswith(pkg):
|
if name.startswith(pkg):
|
||||||
return true
|
return true
|
||||||
|
|
||||||
# proc systemPathDrvsToBuild(): seq[string] =
|
|
||||||
|
|
||||||
type
|
type
|
||||||
OizysDerivation = object
|
OizysDerivation = object
|
||||||
drv: NixDerivation # do i need this ?
|
drv: NixDerivation # do i need this ?
|
||||||
output: string
|
output: string
|
||||||
name: string
|
name: string
|
||||||
|
|
||||||
iterator getSystemPathDrvs(drvs: Table[string, NixDerivation]): string =
|
proc getSystemPathDrvs(): seq[string] =
|
||||||
let systemPaths = findSystemPaths(drvs)
|
let systemDrvs = nixDerivationShow(nixosConfigAttrs())
|
||||||
for p in systemPaths:
|
let systemPathDrvs = findSystemPaths(systemDrvs)
|
||||||
for d in drvs[p].inputDrvs.keys():
|
result =
|
||||||
yield d
|
collect:
|
||||||
|
for k, drv in nixDerivationShow(systemPathDrvs):
|
||||||
|
for inputDrv, _ in drv.inputDrvs:
|
||||||
|
inputDrv
|
||||||
|
|
||||||
|
|
||||||
proc getOizysDerivations(): seq[OizysDerivation] =
|
proc getOizysDerivations(): seq[OizysDerivation] =
|
||||||
let toBuild = toBuildNixosConfiguration()
|
let
|
||||||
let drvs = evaluateDerivations(nixosConfigAttrs())
|
toBuildDrvs = toBuildNixosConfiguration()
|
||||||
|
systemPathDrvs = getSystemPathDrvs()
|
||||||
|
toActullyBuildDrvs = systemPathDrvs.filterIt(it in toBuildDrvs)
|
||||||
|
|
||||||
for name in getSystemPathDrvs(drvs):
|
for name, drv in nixDerivationShow(toActullyBuildDrvs):
|
||||||
if name in toBuild and not isIgnored(name):
|
if not isIgnored(name):
|
||||||
let nixDrv = drvs[name]
|
|
||||||
result.add OizysDerivation(
|
result.add OizysDerivation(
|
||||||
name: name,
|
name: name,
|
||||||
output: nixDrv.outputs.`out`.path,
|
output: drv.outputs.`out`.path,
|
||||||
drv: nixDrv,
|
drv: drv,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# TODO: remove this proc
|
||||||
proc systemPathDrvsToBuild(): seq[string] =
|
proc systemPathDrvsToBuild(): seq[string] =
|
||||||
var inputDrvs, dropped: seq[string]
|
var inputDrvs, dropped: seq[string]
|
||||||
let toBuild = toBuildNixosConfiguration()
|
let toBuild = toBuildNixosConfiguration()
|
||||||
|
@ -210,12 +220,6 @@ proc systemPathDrvsToBuild(): seq[string] =
|
||||||
|
|
||||||
(result, _) = filterSeq(inputDrvs, (s) => s in toBuild)
|
(result, _) = filterSeq(inputDrvs, (s) => s in toBuild)
|
||||||
(dropped, result) = filterSeq(result, isIgnored)
|
(dropped, result) = filterSeq(result, isIgnored)
|
||||||
echo "SOMETHING SHOULD HAPPEN HERE!"
|
|
||||||
for drv in result:
|
|
||||||
echo drv
|
|
||||||
echo drvs[drv]
|
|
||||||
|
|
||||||
|
|
||||||
debug fmt"ignored {dropped.len} derivations"
|
debug fmt"ignored {dropped.len} derivations"
|
||||||
result = result.mapIt(it & "^*")
|
result = result.mapIt(it & "^*")
|
||||||
|
|
||||||
|
@ -294,8 +298,6 @@ proc nixBuildWithCache*(name: string, rest:seq[string], service: string, jobs: i
|
||||||
var cmd = "nix build"
|
var cmd = "nix build"
|
||||||
cmd.addArg drv.name & "^*"
|
cmd.addArg drv.name & "^*"
|
||||||
cmd.addArg "--no-link"
|
cmd.addArg "--no-link"
|
||||||
# cmd.addArg "--print-out-paths"
|
|
||||||
# cmd.addArg "-L"
|
|
||||||
cmd.addArgs rest
|
cmd.addArgs rest
|
||||||
let buildCode = runCmd(cmd)
|
let buildCode = runCmd(cmd)
|
||||||
if buildCode != 0:
|
if buildCode != 0:
|
||||||
|
|
Loading…
Reference in a new issue