add hydra, update ruff, format files
Signed-off-by: ahuston-0 <aliceghuston@gmail.com>
This commit is contained in:
parent
1736643635
commit
03e9a3652f
@ -4,7 +4,7 @@
|
|||||||
formatter,
|
formatter,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
pre-commit-check = inputs.pre-commit-hooks.lib.${system}.run {
|
pre-commit-check = inputs.pre-commit-hooks.lib.${system}.run {
|
||||||
src = ./.;
|
src = ./.;
|
||||||
hooks = {
|
hooks = {
|
||||||
|
29
flake.nix
29
flake.nix
@ -18,8 +18,16 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, flake-utils, poetry2nix,pre-commit-hooks }@inputs:
|
outputs =
|
||||||
flake-utils.lib.eachDefaultSystem (system:
|
{
|
||||||
|
self,
|
||||||
|
nixpkgs,
|
||||||
|
flake-utils,
|
||||||
|
poetry2nix,
|
||||||
|
...
|
||||||
|
}@inputs:
|
||||||
|
flake-utils.lib.eachDefaultSystem (
|
||||||
|
system:
|
||||||
let
|
let
|
||||||
# see https://github.com/nix-community/poetry2nix/tree/master#api for more functions and examples.
|
# see https://github.com/nix-community/poetry2nix/tree/master#api for more functions and examples.
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
@ -33,7 +41,18 @@
|
|||||||
|
|
||||||
formatter = pkgs.nixfmt-rfc-style;
|
formatter = pkgs.nixfmt-rfc-style;
|
||||||
|
|
||||||
devShells = import ./shell.nix {inherit self inputs system checks;};
|
devShells = import ./shell.nix {
|
||||||
checks = import ./checks.nix {inherit inputs system formatter;};
|
inherit
|
||||||
});
|
self
|
||||||
|
inputs
|
||||||
|
system
|
||||||
|
checks
|
||||||
|
;
|
||||||
|
};
|
||||||
|
checks = import ./checks.nix { inherit inputs system formatter; };
|
||||||
|
}
|
||||||
|
)
|
||||||
|
// {
|
||||||
|
hydraJobs = import ./hydra/jobs.nix { inherit (self) inputs outputs; };
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
19
hydra/jobs.nix
Normal file
19
hydra/jobs.nix
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{ inputs, outputs }:
|
||||||
|
let
|
||||||
|
inherit (inputs.nixpkgs) lib;
|
||||||
|
|
||||||
|
notBroken = pkg: !(pkg.meta.broken or false);
|
||||||
|
isDistributable = pkg: (pkg.meta.license or { redistributable = true; }).redistributable;
|
||||||
|
hasPlatform = sys: pkg: lib.elem sys (pkg.meta.platforms or [ sys ]);
|
||||||
|
filterValidPkgs =
|
||||||
|
sys: pkgs:
|
||||||
|
lib.filterAttrs (
|
||||||
|
_: pkg: lib.isDerivation pkg && hasPlatform sys pkg && notBroken pkg && isDistributable pkg
|
||||||
|
) pkgs;
|
||||||
|
in
|
||||||
|
# getCfg = _: cfg: cfg.config.system.build.toplevel;
|
||||||
|
{
|
||||||
|
# hosts = lib.mapAttrs getCfg outputs.nixosConfigurations;
|
||||||
|
inherit (outputs) devShells checks formatter;
|
||||||
|
packages = lib.mapAttrs filterValidPkgs outputs.packages;
|
||||||
|
}
|
87
hydra/jobsets.nix
Normal file
87
hydra/jobsets.nix
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
{ pulls, branches, ... }:
|
||||||
|
let
|
||||||
|
# create the json spec for the jobset
|
||||||
|
makeSpec =
|
||||||
|
contents:
|
||||||
|
builtins.derivation {
|
||||||
|
name = "spec.json";
|
||||||
|
system = "x86_64-linux";
|
||||||
|
preferLocalBuild = true;
|
||||||
|
allowSubstitutes = false;
|
||||||
|
builder = "/bin/sh";
|
||||||
|
args = [
|
||||||
|
(builtins.toFile "builder.sh" ''
|
||||||
|
echo "$contents" > $out
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
contents = builtins.toJSON contents;
|
||||||
|
};
|
||||||
|
|
||||||
|
prs = readJSONFile pulls;
|
||||||
|
refs = readJSONFile branches;
|
||||||
|
repo = "ahuston-0/canvas_grit_automation";
|
||||||
|
|
||||||
|
# template for creating a job
|
||||||
|
makeJob =
|
||||||
|
{
|
||||||
|
schedulingshares ? 10,
|
||||||
|
keepnr ? 3,
|
||||||
|
description,
|
||||||
|
flake,
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
inherit
|
||||||
|
description
|
||||||
|
flake
|
||||||
|
schedulingshares
|
||||||
|
keepnr
|
||||||
|
;
|
||||||
|
enabled = 1;
|
||||||
|
type = 1;
|
||||||
|
hidden = false;
|
||||||
|
checkinterval = 300; # every 6 months
|
||||||
|
enableemail = false;
|
||||||
|
emailoverride = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Create a hydra job for a branch
|
||||||
|
jobOfRef =
|
||||||
|
name:
|
||||||
|
{ ref, ... }:
|
||||||
|
if (builtins.match "^refs/heads/(.*)$" ref) == null then
|
||||||
|
null
|
||||||
|
else
|
||||||
|
{
|
||||||
|
name = builtins.replaceStrings [ "/" ] [ "-" ] "branch-${name}";
|
||||||
|
value = makeJob {
|
||||||
|
description = "Branch ${name}";
|
||||||
|
flake = "git+ssh://git@github.com/${repo}?ref=${ref}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Create a hydra job for a PR
|
||||||
|
jobOfPR = id: info: {
|
||||||
|
name = "pr-${id}";
|
||||||
|
value = makeJob {
|
||||||
|
description = "PR ${id}: ${info.title}";
|
||||||
|
flake = "git+ssh://git@github.com/${info.head.repo.full_name}?ref=${info.head.ref}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# some utility functions
|
||||||
|
# converts json to name/value dicts
|
||||||
|
attrsToList = l: builtins.attrValues (builtins.mapAttrs (name: value: { inherit name value; }) l);
|
||||||
|
# wrapper function for reading json from file
|
||||||
|
readJSONFile = f: builtins.fromJSON (builtins.readFile f);
|
||||||
|
# remove null values from a set, in-case of branches that don't exist
|
||||||
|
mapFilter = f: l: builtins.filter (x: x != null) (map f l);
|
||||||
|
|
||||||
|
# Create job set from PRs and branches
|
||||||
|
jobs = makeSpec (
|
||||||
|
builtins.listToAttrs (map ({ name, value }: jobOfPR name value) (attrsToList prs))
|
||||||
|
// builtins.listToAttrs (mapFilter ({ name, value }: jobOfRef name value) (attrsToList refs))
|
||||||
|
);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
jobsets = jobs;
|
||||||
|
}
|
35
hydra/spec.json
Normal file
35
hydra/spec.json
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"enabled": 1,
|
||||||
|
"hidden": false,
|
||||||
|
"description": "Canvas grit automation",
|
||||||
|
"nixexprinput": "nixexpr",
|
||||||
|
"nixexprpath": "hydra/jobsets.nix",
|
||||||
|
"checkinterval": 60,
|
||||||
|
"schedulingshares": 100,
|
||||||
|
"enableemail": false,
|
||||||
|
"emailoverride": "",
|
||||||
|
"keepnr": 3,
|
||||||
|
"type": 0,
|
||||||
|
"inputs": {
|
||||||
|
"nixexpr": {
|
||||||
|
"value": "https://github.com/ahuston-0/canvas_grit_automation master",
|
||||||
|
"type": "git",
|
||||||
|
"emailresponsible": false
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"value": "https://github.com/NixOS/nixpkgs nixos-unstable-small",
|
||||||
|
"type": "git",
|
||||||
|
"emailresponsible": false
|
||||||
|
},
|
||||||
|
"pulls": {
|
||||||
|
"type": "githubpulls",
|
||||||
|
"value": "ahuston-0 canvas_grit_automation",
|
||||||
|
"emailresponsible": false
|
||||||
|
},
|
||||||
|
"branches": {
|
||||||
|
"type": "github_refs",
|
||||||
|
"value": "ahuston-0 canvas_grit_automation heads -",
|
||||||
|
"emailresponsible": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
39
poetry.lock
generated
39
poetry.lock
generated
@ -73,28 +73,29 @@ test = ["objgraph", "psutil"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruff"
|
name = "ruff"
|
||||||
version = "0.4.10"
|
version = "0.5.1"
|
||||||
description = "An extremely fast Python linter and code formatter, written in Rust."
|
description = "An extremely fast Python linter and code formatter, written in Rust."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "ruff-0.4.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5c2c4d0859305ac5a16310eec40e4e9a9dec5dcdfbe92697acd99624e8638dac"},
|
{file = "ruff-0.5.1-py3-none-linux_armv6l.whl", hash = "sha256:6ecf968fcf94d942d42b700af18ede94b07521bd188aaf2cd7bc898dd8cb63b6"},
|
||||||
{file = "ruff-0.4.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a79489607d1495685cdd911a323a35871abfb7a95d4f98fc6f85e799227ac46e"},
|
{file = "ruff-0.5.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:204fb0a472f00f2e6280a7c8c7c066e11e20e23a37557d63045bf27a616ba61c"},
|
||||||
{file = "ruff-0.4.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1dd1681dfa90a41b8376a61af05cc4dc5ff32c8f14f5fe20dba9ff5deb80cd6"},
|
{file = "ruff-0.5.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d235968460e8758d1e1297e1de59a38d94102f60cafb4d5382033c324404ee9d"},
|
||||||
{file = "ruff-0.4.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c75c53bb79d71310dc79fb69eb4902fba804a81f374bc86a9b117a8d077a1784"},
|
{file = "ruff-0.5.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38beace10b8d5f9b6bdc91619310af6d63dd2019f3fb2d17a2da26360d7962fa"},
|
||||||
{file = "ruff-0.4.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18238c80ee3d9100d3535d8eb15a59c4a0753b45cc55f8bf38f38d6a597b9739"},
|
{file = "ruff-0.5.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e478d2f09cf06add143cf8c4540ef77b6599191e0c50ed976582f06e588c994"},
|
||||||
{file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d8f71885bce242da344989cae08e263de29752f094233f932d4f5cfb4ef36a81"},
|
{file = "ruff-0.5.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0368d765eec8247b8550251c49ebb20554cc4e812f383ff9f5bf0d5d94190b0"},
|
||||||
{file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:330421543bd3222cdfec481e8ff3460e8702ed1e58b494cf9d9e4bf90db52b9d"},
|
{file = "ruff-0.5.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:3a9a9a1b582e37669b0138b7c1d9d60b9edac880b80eb2baba6d0e566bdeca4d"},
|
||||||
{file = "ruff-0.4.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e9b6fb3a37b772628415b00c4fc892f97954275394ed611056a4b8a2631365e"},
|
{file = "ruff-0.5.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bdd9f723e16003623423affabcc0a807a66552ee6a29f90eddad87a40c750b78"},
|
||||||
{file = "ruff-0.4.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f54c481b39a762d48f64d97351048e842861c6662d63ec599f67d515cb417f6"},
|
{file = "ruff-0.5.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:be9fd62c1e99539da05fcdc1e90d20f74aec1b7a1613463ed77870057cd6bd96"},
|
||||||
{file = "ruff-0.4.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:67fe086b433b965c22de0b4259ddfe6fa541c95bf418499bedb9ad5fb8d1c631"},
|
{file = "ruff-0.5.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e216fc75a80ea1fbd96af94a6233d90190d5b65cc3d5dfacf2bd48c3e067d3e1"},
|
||||||
{file = "ruff-0.4.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:acfaaab59543382085f9eb51f8e87bac26bf96b164839955f244d07125a982ef"},
|
{file = "ruff-0.5.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c4c2112e9883a40967827d5c24803525145e7dab315497fae149764979ac7929"},
|
||||||
{file = "ruff-0.4.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3cea07079962b2941244191569cf3a05541477286f5cafea638cd3aa94b56815"},
|
{file = "ruff-0.5.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:dfaf11c8a116394da3b65cd4b36de30d8552fa45b8119b9ef5ca6638ab964fa3"},
|
||||||
{file = "ruff-0.4.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:338a64ef0748f8c3a80d7f05785930f7965d71ca260904a9321d13be24b79695"},
|
{file = "ruff-0.5.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d7ceb9b2fe700ee09a0c6b192c5ef03c56eb82a0514218d8ff700f6ade004108"},
|
||||||
{file = "ruff-0.4.10-py3-none-win32.whl", hash = "sha256:ffe3cd2f89cb54561c62e5fa20e8f182c0a444934bf430515a4b422f1ab7b7ca"},
|
{file = "ruff-0.5.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:bac6288e82f6296f82ed5285f597713acb2a6ae26618ffc6b429c597b392535c"},
|
||||||
{file = "ruff-0.4.10-py3-none-win_amd64.whl", hash = "sha256:67f67cef43c55ffc8cc59e8e0b97e9e60b4837c8f21e8ab5ffd5d66e196e25f7"},
|
{file = "ruff-0.5.1-py3-none-win32.whl", hash = "sha256:5c441d9c24ec09e1cb190a04535c5379b36b73c4bc20aa180c54812c27d1cca4"},
|
||||||
{file = "ruff-0.4.10-py3-none-win_arm64.whl", hash = "sha256:dd1fcee327c20addac7916ca4e2653fbbf2e8388d8a6477ce5b4e986b68ae6c0"},
|
{file = "ruff-0.5.1-py3-none-win_amd64.whl", hash = "sha256:b1789bf2cd3d1b5a7d38397cac1398ddf3ad7f73f4de01b1e913e2abc7dfc51d"},
|
||||||
{file = "ruff-0.4.10.tar.gz", hash = "sha256:3aa4f2bc388a30d346c56524f7cacca85945ba124945fe489952aadb6b5cd804"},
|
{file = "ruff-0.5.1-py3-none-win_arm64.whl", hash = "sha256:2875b7596a740cbbd492f32d24be73e545a4ce0a3daf51e4f4e609962bfd3cd2"},
|
||||||
|
{file = "ruff-0.5.1.tar.gz", hash = "sha256:3164488aebd89b1745b47fd00604fb4358d774465f20d1fcd907f9c0fc1b0655"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -198,4 +199,4 @@ files = [
|
|||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = "^3.11"
|
python-versions = "^3.11"
|
||||||
content-hash = "e2477b2e2162ec2a5bcf673756341f3aa6f2bdb83c5438b6c3bc8f7fced226e2"
|
content-hash = "6ebb0770da484a771f8c11e7ba8100b3180b80c107e8b56d240036e7d2689506"
|
||||||
|
@ -12,7 +12,7 @@ sqlalchemy = "^2.0.31"
|
|||||||
|
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
[tool.poetry.group.dev.dependencies]
|
||||||
ruff = "^0.4.4"
|
ruff = "0.5.1"
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core"]
|
requires = ["poetry-core"]
|
||||||
|
16
shell.nix
16
shell.nix
@ -6,7 +6,7 @@
|
|||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
inherit (inputs) nixpkgs;
|
inherit (inputs) nixpkgs;
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
|
|
||||||
@ -28,16 +28,12 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# constructs the application in-place
|
# constructs the application in-place
|
||||||
app = pkgs.mkShell{
|
app = pkgs.mkShell { inputsFrom = [ self.packages.${system}.myapp ]; };
|
||||||
inputsFrom = [self.packages.${system}.myapp];
|
|
||||||
};
|
|
||||||
|
|
||||||
# pull in python/poetry dependencies
|
# pull in python/poetry dependencies
|
||||||
poetry = pkgs.mkShell {
|
poetry = pkgs.mkShell { packages = [ pkgs.poetry ]; };
|
||||||
pacakges = [pkgs.poetry];
|
in
|
||||||
};
|
{
|
||||||
in
|
|
||||||
{
|
|
||||||
default = pkgs.mkShell {
|
default = pkgs.mkShell {
|
||||||
inputsFrom = [
|
inputsFrom = [
|
||||||
pre-commit
|
pre-commit
|
||||||
@ -46,4 +42,4 @@
|
|||||||
poetry
|
poetry
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
22
treefmt.toml
Normal file
22
treefmt.toml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# One CLI to format the code tree - https://github.com/numtide/treefmt
|
||||||
|
|
||||||
|
[global]
|
||||||
|
# Glob patterns of files to exclude
|
||||||
|
excludes = [ ".git/" ]
|
||||||
|
|
||||||
|
|
||||||
|
[formatter.nixfmt]
|
||||||
|
# Formatter to run
|
||||||
|
command = "nixfmt"
|
||||||
|
# Command-line arguments for the command
|
||||||
|
#options = []
|
||||||
|
# Glob pattern of files to include
|
||||||
|
includes = [ "*.nix" ]
|
||||||
|
|
||||||
|
[formatter.ruff]
|
||||||
|
# Formatter to run
|
||||||
|
command = "ruff"
|
||||||
|
# Command-line arguments for the command
|
||||||
|
options = ["format"]
|
||||||
|
# Glob pattern of files to include
|
||||||
|
includes = [ "*.py" ]
|
Loading…
x
Reference in New Issue
Block a user