feat: update sqlx and add methods to work with jobs table

This commit is contained in:
Aravinth Manivannan 2023-09-27 21:39:51 +05:30
parent 6b5ca28243
commit 88af240a0c
Signed by: realaravinth
GPG Key ID: F8F50389936984FF
11 changed files with 983 additions and 20 deletions

View File

@ -0,0 +1,16 @@
{
"db_name": "PostgreSQL",
"query": "\n UPDATE\n ftest_jobs\n SET\n job_state = (SELECT ID FROM ftest_job_states WHERE name = $1),\n scheduled_at = $2\n WHERE auth = $3;",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Text",
"Timestamptz",
"Text"
]
},
"nullable": []
},
"hash": "1a317e97df24ca0cd8e9e70e400757943787cc5698f1f78942150eea869abcc3"
}

View File

@ -0,0 +1,17 @@
{
"db_name": "PostgreSQL",
"query": "INSERT INTO ftest_jobs\n (commit_hash, job_state, auth, created_at)\n VALUES ($1, (SELECT ID FROM ftest_job_states WHERE name = $2), $3, $4)",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Varchar",
"Text",
"Varchar",
"Timestamptz"
]
},
"nullable": []
},
"hash": "1b8b3e3dac6353829abcd3c49617542415b79ed6cbc2e7468e60b078dad5b53d"
}

View File

@ -0,0 +1,52 @@
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n ftest_jobs.ID,\n ftest_jobs.commit_hash,\n ftest_job_states.name,\n ftest_jobs.created_at,\n ftest_jobs.scheduled_at,\n ftest_jobs.finished_at\n\n FROM ftest_jobs\n INNER JOIN\n ftest_job_states\n ON\n ftest_job_states.ID = ftest_jobs.job_state\n WHERE\n ftest_job_states.name = $1;",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id",
"type_info": "Int4"
},
{
"ordinal": 1,
"name": "commit_hash",
"type_info": "Varchar"
},
{
"ordinal": 2,
"name": "name",
"type_info": "Varchar"
},
{
"ordinal": 3,
"name": "created_at",
"type_info": "Timestamptz"
},
{
"ordinal": 4,
"name": "scheduled_at",
"type_info": "Timestamptz"
},
{
"ordinal": 5,
"name": "finished_at",
"type_info": "Timestamptz"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
false,
false,
false,
false,
true,
true
]
},
"hash": "74bacf397f38e738e9d8dcc9ad5cc5c07915bff6276bd5005fd7221a76741e8b"
}

View File

@ -0,0 +1,52 @@
{
"db_name": "PostgreSQL",
"query": "\n SELECT\n ftest_jobs.ID,\n ftest_jobs.commit_hash,\n ftest_job_states.name,\n ftest_jobs.created_at,\n ftest_jobs.scheduled_at,\n ftest_jobs.finished_at\n\n FROM ftest_jobs\n INNER JOIN\n ftest_job_states\n ON\n ftest_job_states.ID = ftest_jobs.job_state\n WHERE\n ftest_jobs.commit_hash = $1",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "id",
"type_info": "Int4"
},
{
"ordinal": 1,
"name": "commit_hash",
"type_info": "Varchar"
},
{
"ordinal": 2,
"name": "name",
"type_info": "Varchar"
},
{
"ordinal": 3,
"name": "created_at",
"type_info": "Timestamptz"
},
{
"ordinal": 4,
"name": "scheduled_at",
"type_info": "Timestamptz"
},
{
"ordinal": 5,
"name": "finished_at",
"type_info": "Timestamptz"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
false,
false,
false,
false,
true,
true
]
},
"hash": "8f43686f9512d4e3f75e000515bdc90dd7c999a585e6b7b79459545bb583daa0"
}

View File

@ -0,0 +1,16 @@
{
"db_name": "PostgreSQL",
"query": "\n UPDATE\n ftest_jobs\n SET\n job_state = (SELECT ID FROM ftest_job_states WHERE name = $1),\n finished_at = $2\n WHERE auth = $3;",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Text",
"Timestamptz",
"Text"
]
},
"nullable": []
},
"hash": "985c4f76d8ccef02d4c1c47628fa1360c49cf7d0f1eb4eeea73117cda7eefe91"
}

View File

@ -0,0 +1,14 @@
{
"db_name": "PostgreSQL",
"query": "INSERT INTO ftest_job_states\n (name) VALUES ($1) ON CONFLICT (name) DO NOTHING;",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Varchar"
]
},
"nullable": []
},
"hash": "c43b464586d8b356ef09ebff65649f86699411f7a0c1bc2db5ab6125cd5c2828"
}

View File

@ -0,0 +1,14 @@
{
"db_name": "PostgreSQL",
"query": "\n DELETE FROM\n ftest_jobs\n WHERE commit_hash = $1;",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Text"
]
},
"nullable": []
},
"hash": "f41b0fa86f004be0f412517ae43aa8107433f6593077ee4197ff80cf2dc1f643"
}

View File

@ -0,0 +1,22 @@
{
"db_name": "PostgreSQL",
"query": "SELECT EXISTS (SELECT 1 from ftest_job_states WHERE name = $1)",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "exists",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
null
]
},
"hash": "f93894995de10d5eb0dc6fd249fd93e22354dfe90d461c4a8e7469887cef63d6"
}

582
Cargo.lock generated
View File

@ -321,6 +321,15 @@ dependencies = [
"num-traits",
]
[[package]]
name = "atoi"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528"
dependencies = [
"num-traits",
]
[[package]]
name = "atty"
version = "0.2.14"
@ -365,6 +374,12 @@ version = "0.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53"
[[package]]
name = "base64ct"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
[[package]]
name = "bitflags"
version = "1.3.2"
@ -376,6 +391,9 @@ name = "bitflags"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
dependencies = [
"serde",
]
[[package]]
name = "block-buffer"
@ -465,10 +483,16 @@ dependencies = [
"rust-ini",
"serde",
"serde_json",
"toml",
"toml 0.5.11",
"yaml-rust",
]
[[package]]
name = "const-oid"
version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
[[package]]
name = "convert_case"
version = "0.4.0"
@ -599,6 +623,17 @@ dependencies = [
"syn 1.0.109",
]
[[package]]
name = "der"
version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c"
dependencies = [
"const-oid",
"pem-rfc7468",
"zeroize",
]
[[package]]
name = "deranged"
version = "0.3.8"
@ -656,6 +691,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
dependencies = [
"block-buffer",
"const-oid",
"crypto-common",
"subtle",
]
@ -723,6 +759,12 @@ dependencies = [
"termcolor",
]
[[package]]
name = "equivalent"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "errno"
version = "0.3.3"
@ -744,6 +786,17 @@ dependencies = [
"libc",
]
[[package]]
name = "etcetera"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943"
dependencies = [
"cfg-if",
"home",
"windows-sys",
]
[[package]]
name = "event-listener"
version = "2.5.3"
@ -766,6 +819,17 @@ dependencies = [
"miniz_oxide",
]
[[package]]
name = "flume"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
dependencies = [
"futures-core",
"futures-sink",
"spin 0.9.8",
]
[[package]]
name = "fnv"
version = "1.0.7"
@ -813,6 +877,7 @@ dependencies = [
"lazy_static",
"log",
"mime_guess",
"mktemp",
"num_cpus",
"pretty_env_logger",
"rand",
@ -821,7 +886,10 @@ dependencies = [
"semver",
"serde",
"serde_json",
"sqlx",
"sqlx 0.6.3",
"sqlx 0.7.2",
"tokio",
"toml 0.7.6",
"tracing",
"tracing-actix-web",
"tracing-subscriber",
@ -845,6 +913,17 @@ version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
[[package]]
name = "futures-executor"
version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
dependencies = [
"futures-core",
"futures-task",
"futures-util",
]
[[package]]
name = "futures-intrusive"
version = "0.4.2"
@ -856,6 +935,23 @@ dependencies = [
"parking_lot 0.11.2",
]
[[package]]
name = "futures-intrusive"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f"
dependencies = [
"futures-core",
"lock_api",
"parking_lot 0.12.1",
]
[[package]]
name = "futures-io"
version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
[[package]]
name = "futures-sink"
version = "0.3.28"
@ -875,8 +971,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
dependencies = [
"futures-core",
"futures-io",
"futures-sink",
"futures-task",
"memchr",
"pin-project-lite",
"pin-utils",
"slab",
@ -921,7 +1019,7 @@ dependencies = [
"futures-sink",
"futures-util",
"http",
"indexmap",
"indexmap 1.9.3",
"slab",
"tokio",
"tokio-util",
@ -1004,6 +1102,15 @@ dependencies = [
"digest",
]
[[package]]
name = "home"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
dependencies = [
"windows-sys",
]
[[package]]
name = "http"
version = "0.2.9"
@ -1110,6 +1217,16 @@ dependencies = [
"hashbrown 0.12.3",
]
[[package]]
name = "indexmap"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
dependencies = [
"equivalent",
"hashbrown 0.14.0",
]
[[package]]
name = "instant"
version = "0.1.12"
@ -1180,6 +1297,9 @@ name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
dependencies = [
"spin 0.5.2",
]
[[package]]
name = "libc"
@ -1187,6 +1307,23 @@ version = "0.2.147"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
[[package]]
name = "libm"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
[[package]]
name = "libsqlite3-sys"
version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326"
dependencies = [
"cc",
"pkg-config",
"vcpkg",
]
[[package]]
name = "linked-hash-map"
version = "0.5.6"
@ -1291,6 +1428,15 @@ dependencies = [
"windows-sys",
]
[[package]]
name = "mktemp"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69fed8fbcd01affec44ac226784c6476a6006d98d13e33bc0ca7977aaf046bd8"
dependencies = [
"uuid",
]
[[package]]
name = "native-tls"
version = "0.2.11"
@ -1329,6 +1475,44 @@ dependencies = [
"winapi",
]
[[package]]
name = "num-bigint-dig"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151"
dependencies = [
"byteorder",
"lazy_static",
"libm",
"num-integer",
"num-iter",
"num-traits",
"rand",
"smallvec",
"zeroize",
]
[[package]]
name = "num-integer"
version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
dependencies = [
"autocfg",
"num-traits",
]
[[package]]
name = "num-iter"
version = "0.1.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
dependencies = [
"autocfg",
"num-integer",
"num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.16"
@ -1336,6 +1520,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
dependencies = [
"autocfg",
"libm",
]
[[package]]
@ -1483,6 +1668,15 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
[[package]]
name = "pem-rfc7468"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
dependencies = [
"base64ct",
]
[[package]]
name = "percent-encoding"
version = "2.3.0"
@ -1566,6 +1760,27 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "pkcs1"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
dependencies = [
"der",
"pkcs8",
"spki",
]
[[package]]
name = "pkcs8"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
dependencies = [
"der",
"spki",
]
[[package]]
name = "pkg-config"
version = "0.3.27"
@ -1762,7 +1977,7 @@ dependencies = [
"cc",
"libc",
"once_cell",
"spin",
"spin 0.5.2",
"untrusted",
"web-sys",
"winapi",
@ -1779,6 +1994,28 @@ dependencies = [
"serde",
]
[[package]]
name = "rsa"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ab43bb47d23c1a631b4b680199a45255dce26fa9ab2fa902581f624ff13e6a8"
dependencies = [
"byteorder",
"const-oid",
"digest",
"num-bigint-dig",
"num-integer",
"num-iter",
"num-traits",
"pkcs1",
"pkcs8",
"rand_core",
"signature",
"spki",
"subtle",
"zeroize",
]
[[package]]
name = "rust-embed"
version = "6.8.1"
@ -1863,6 +2100,17 @@ dependencies = [
"webpki",
]
[[package]]
name = "rustls"
version = "0.21.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8"
dependencies = [
"ring",
"rustls-webpki",
"sct",
]
[[package]]
name = "rustls-pemfile"
version = "1.0.3"
@ -1872,6 +2120,16 @@ dependencies = [
"base64 0.21.3",
]
[[package]]
name = "rustls-webpki"
version = "0.101.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe"
dependencies = [
"ring",
"untrusted",
]
[[package]]
name = "ryu"
version = "1.0.15"
@ -1975,6 +2233,15 @@ dependencies = [
"serde",
]
[[package]]
name = "serde_spanned"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
dependencies = [
"serde",
]
[[package]]
name = "serde_urlencoded"
version = "0.7.1"
@ -2027,6 +2294,16 @@ dependencies = [
"libc",
]
[[package]]
name = "signature"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500"
dependencies = [
"digest",
"rand_core",
]
[[package]]
name = "slab"
version = "0.4.9"
@ -2068,6 +2345,25 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
name = "spin"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
dependencies = [
"lock_api",
]
[[package]]
name = "spki"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
dependencies = [
"base64ct",
"der",
]
[[package]]
name = "sqlformat"
version = "0.2.2"
@ -2085,8 +2381,21 @@ version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8de3b03a925878ed54a954f621e64bf55a3c1bd29652d0d1a17830405350188"
dependencies = [
"sqlx-core",
"sqlx-macros",
"sqlx-core 0.6.3",
"sqlx-macros 0.6.3",
]
[[package]]
name = "sqlx"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e50c216e3624ec8e7ecd14c6a6a6370aad6ee5d8cfc3ab30b5162eeeef2ed33"
dependencies = [
"sqlx-core 0.7.2",
"sqlx-macros 0.7.2",
"sqlx-mysql",
"sqlx-postgres",
"sqlx-sqlite",
]
[[package]]
@ -2096,7 +2405,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa8241483a83a3f33aa5fff7e7d9def398ff9990b2752b6c6112b83c6d246029"
dependencies = [
"ahash 0.7.6",
"atoi",
"atoi 1.0.0",
"base64 0.13.1",
"bitflags 1.3.2",
"byteorder",
@ -2109,13 +2418,13 @@ dependencies = [
"event-listener",
"futures-channel",
"futures-core",
"futures-intrusive",
"futures-intrusive 0.4.2",
"futures-util",
"hashlink",
"hex",
"hkdf",
"hmac",
"indexmap",
"indexmap 1.9.3",
"itoa",
"libc",
"log",
@ -2125,7 +2434,7 @@ dependencies = [
"paste",
"percent-encoding",
"rand",
"rustls",
"rustls 0.20.9",
"rustls-pemfile",
"serde",
"serde_json",
@ -2139,10 +2448,54 @@ dependencies = [
"time",
"tokio-stream",
"url",
"webpki-roots",
"webpki-roots 0.22.6",
"whoami",
]
[[package]]
name = "sqlx-core"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d6753e460c998bbd4cd8c6f0ed9a64346fcca0723d6e75e52fdc351c5d2169d"
dependencies = [
"ahash 0.8.3",
"atoi 2.0.0",
"byteorder",
"bytes",
"crc",
"crossbeam-queue",
"dotenvy",
"either",
"event-listener",
"futures-channel",
"futures-core",
"futures-intrusive 0.5.0",
"futures-io",
"futures-util",
"hashlink",
"hex",
"indexmap 2.0.0",
"log",
"memchr",
"once_cell",
"paste",
"percent-encoding",
"rustls 0.21.7",
"rustls-pemfile",
"serde",
"serde_json",
"sha2",
"smallvec",
"sqlformat",
"thiserror",
"time",
"tokio",
"tokio-stream",
"tracing",
"url",
"webpki-roots 0.24.0",
]
[[package]]
name = "sqlx-macros"
version = "0.6.3"
@ -2159,12 +2512,134 @@ dependencies = [
"serde",
"serde_json",
"sha2",
"sqlx-core",
"sqlx-core 0.6.3",
"sqlx-rt",
"syn 1.0.109",
"url",
]
[[package]]
name = "sqlx-macros"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a793bb3ba331ec8359c1853bd39eed32cdd7baaf22c35ccf5c92a7e8d1189ec"
dependencies = [
"proc-macro2",
"quote",
"sqlx-core 0.7.2",
"sqlx-macros-core",
"syn 1.0.109",
]
[[package]]
name = "sqlx-macros-core"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a4ee1e104e00dedb6aa5ffdd1343107b0a4702e862a84320ee7cc74782d96fc"
dependencies = [
"dotenvy",
"either",
"heck",
"hex",
"once_cell",
"proc-macro2",
"quote",
"serde",
"serde_json",
"sha2",
"sqlx-core 0.7.2",
"sqlx-mysql",
"sqlx-postgres",
"sqlx-sqlite",
"syn 1.0.109",
"tempfile",
"tokio",
"url",
]
[[package]]
name = "sqlx-mysql"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "864b869fdf56263f4c95c45483191ea0af340f9f3e3e7b4d57a61c7c87a970db"
dependencies = [
"atoi 2.0.0",
"base64 0.21.3",
"bitflags 2.4.0",
"byteorder",
"bytes",
"crc",
"digest",
"dotenvy",
"either",
"futures-channel",
"futures-core",
"futures-io",
"futures-util",
"generic-array",
"hex",
"hkdf",
"hmac",
"itoa",
"log",
"md-5",
"memchr",
"once_cell",
"percent-encoding",
"rand",
"rsa",
"serde",
"sha1",
"sha2",
"smallvec",
"sqlx-core 0.7.2",
"stringprep",
"thiserror",
"time",
"tracing",
"whoami",
]
[[package]]
name = "sqlx-postgres"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb7ae0e6a97fb3ba33b23ac2671a5ce6e3cabe003f451abd5a56e7951d975624"
dependencies = [
"atoi 2.0.0",
"base64 0.21.3",
"bitflags 2.4.0",
"byteorder",
"crc",
"dotenvy",
"etcetera",
"futures-channel",
"futures-core",
"futures-io",
"futures-util",
"hex",
"hkdf",
"hmac",
"home",
"itoa",
"log",
"md-5",
"memchr",
"once_cell",
"rand",
"serde",
"serde_json",
"sha1",
"sha2",
"smallvec",
"sqlx-core 0.7.2",
"stringprep",
"thiserror",
"time",
"tracing",
"whoami",
]
[[package]]
name = "sqlx-rt"
version = "0.6.3"
@ -2176,6 +2651,29 @@ dependencies = [
"tokio-rustls",
]
[[package]]
name = "sqlx-sqlite"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d59dc83cf45d89c555a577694534fcd1b55c545a816c816ce51f20bbe56a4f3f"
dependencies = [
"atoi 2.0.0",
"flume",
"futures-channel",
"futures-core",
"futures-executor",
"futures-intrusive 0.5.0",
"futures-util",
"libsqlite3-sys",
"log",
"percent-encoding",
"serde",
"sqlx-core 0.7.2",
"time",
"tracing",
"url",
]
[[package]]
name = "stringprep"
version = "0.1.3"
@ -2349,7 +2847,7 @@ version = "0.23.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
dependencies = [
"rustls",
"rustls 0.20.9",
"tokio",
"webpki",
]
@ -2388,6 +2886,40 @@ dependencies = [
"serde",
]
[[package]]
name = "toml"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
"toml_edit",
]
[[package]]
name = "toml_datetime"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
dependencies = [
"serde",
]
[[package]]
name = "toml_edit"
version = "0.19.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a"
dependencies = [
"indexmap 2.0.0",
"serde",
"serde_spanned",
"toml_datetime",
"winnow",
]
[[package]]
name = "tower-service"
version = "0.3.2"
@ -2691,6 +3223,15 @@ dependencies = [
"webpki",
]
[[package]]
name = "webpki-roots"
version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888"
dependencies = [
"rustls-webpki",
]
[[package]]
name = "whoami"
version = "1.4.1"
@ -2798,6 +3339,15 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "winnow"
version = "0.5.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc"
dependencies = [
"memchr",
]
[[package]]
name = "winreg"
version = "0.50.0"
@ -2817,6 +3367,12 @@ dependencies = [
"linked-hash-map",
]
[[package]]
name = "zeroize"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
[[package]]
name = "zstd"
version = "0.12.4"

View File

@ -3,6 +3,11 @@ name = "ftest"
version = "0.1.0"
edition = "2021"
build = "build.rs"
defalt-run ="./src/main.rs"
[[bin]]
name ="config_validator"
path = "./src/complaince/validator.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@ -14,7 +19,7 @@ futures-util = { version = "0.3.17", default-features = false, features = ["std"
lazy_static = "1.4.0"
log = "0.4.17"
pretty_env_logger = "0.4.0"
serde = { version = "1", features=["derive"]}
serde = { version = "1", features = ["derive"] }
actix-web-codegen-const-routes = { version = "0.1.0", tag = "0.1.0", git = "https://github.com/realaravinth/actix-web-codegen-const-routes" }
derive_builder = "0.11.2"
config = "0.13"
@ -24,7 +29,7 @@ serde_json = { version ="1", features = ["raw_value"]}
actix-web-httpauth = "0.8.0"
mime_guess = "2.0.4"
rust-embed = "6.4.2"
sqlx = { version = "0.6.1", features = [ "runtime-actix-rustls", "postgres", "time", "offline"] }
sqlx = { version = "0.7", features = [ "runtime-tokio-rustls", "postgres", "time"] }
tracing = { version = "0.1.37", features = ["log"] }
tracing-actix-web = "0.7.6"
tracing-subscriber = "0.3.17"
@ -32,6 +37,8 @@ num_cpus = "1.16.0"
uuid = { version = "1.4.1", features = ["v4", "serde"] }
rand = "0.8.5"
semver = { version = "1.0.18", features = ["serde"] }
toml = "0.7.6"
tokio = { version = "1.32.0", features = ["sync"] }
[build-dependencies]
serde_json = "1"
@ -40,3 +47,4 @@ sqlx = { version = "0.6.1", features = [ "runtime-actix-rustls", "postgres", "ti
[dev-dependencies]
actix-rt = "2.7.0"
base64 = "0.13.0"
mktemp = "0.5.1"

206
src/db.rs
View File

@ -38,7 +38,7 @@ impl ConnectionOptions {
let mut connect_options =
sqlx::postgres::PgConnectOptions::from_str(&fresh.url).unwrap();
if fresh.disable_logging {
connect_options.disable_statement_logging();
connect_options = connect_options.disable_statement_logging();
}
sqlx::postgres::PgConnectOptions::from_str(&fresh.url)
.unwrap()
@ -133,6 +133,140 @@ impl Database {
false
}
}
pub async fn add_job(&self, commit_hash: &str) -> ServiceResult<String> {
let auth = crate::utils::get_random(32);
let now = now_unix_time_stamp();
sqlx::query!(
"INSERT INTO ftest_jobs
(commit_hash, job_state, auth, created_at)
VALUES ($1, (SELECT ID FROM ftest_job_states WHERE name = $2), $3, $4)",
commit_hash,
&JOB_STATE_CREATE.name,
&auth,
now
)
.execute(&self.pool)
.await
.map_err(map_register_err)?;
Ok(auth)
}
pub async fn mark_job_scheduled(&self, auth: &str) -> ServiceResult<()> {
let now = now_unix_time_stamp();
sqlx::query!(
"
UPDATE
ftest_jobs
SET
job_state = (SELECT ID FROM ftest_job_states WHERE name = $1),
scheduled_at = $2
WHERE auth = $3;",
&JOB_STATE_RUNNING.name,
now,
auth,
)
.execute(&self.pool)
.await
.map_err(map_register_err)?;
Ok(())
}
pub async fn mark_job_finished(&self, auth: &str) -> ServiceResult<()> {
let now = now_unix_time_stamp();
sqlx::query!(
"
UPDATE
ftest_jobs
SET
job_state = (SELECT ID FROM ftest_job_states WHERE name = $1),
finished_at = $2
WHERE auth = $3;",
&JOB_STATE_FINISH.name,
now,
auth,
)
.execute(&self.pool)
.await
.map_err(map_register_err)?;
Ok(())
}
pub async fn get_job(&self, commit_hash: &str) -> ServiceResult<Job> {
let res = sqlx::query_as!(
InnerJob,
"
SELECT
ftest_jobs.ID,
ftest_jobs.commit_hash,
ftest_job_states.name,
ftest_jobs.created_at,
ftest_jobs.scheduled_at,
ftest_jobs.finished_at
FROM ftest_jobs
INNER JOIN
ftest_job_states
ON
ftest_job_states.ID = ftest_jobs.job_state
WHERE
ftest_jobs.commit_hash = $1",
commit_hash
)
.fetch_one(&self.pool)
.await
.map_err(map_register_err)?;
Ok(res.into())
}
pub async fn get_all_jobs_of_state(&self, state: &JobState) -> ServiceResult<Vec<Job>> {
let mut res = sqlx::query_as!(
InnerJob,
"
SELECT
ftest_jobs.ID,
ftest_jobs.commit_hash,
ftest_job_states.name,
ftest_jobs.created_at,
ftest_jobs.scheduled_at,
ftest_jobs.finished_at
FROM ftest_jobs
INNER JOIN
ftest_job_states
ON
ftest_job_states.ID = ftest_jobs.job_state
WHERE
ftest_job_states.name = $1;",
&state.name
)
.fetch_all(&self.pool)
.await
.map_err(map_register_err)?;
let res = res.drain(0..).map(|r| r.into()).collect();
Ok(res)
}
pub async fn delete_job(&self, commit_hash: &str) -> ServiceResult<()> {
sqlx::query!(
"
DELETE FROM
ftest_jobs
WHERE commit_hash = $1;",
commit_hash,
)
.execute(&self.pool)
.await
.map_err(map_register_err)?;
Ok(())
}
}
fn now_unix_time_stamp() -> OffsetDateTime {
@ -160,6 +294,43 @@ pub fn map_row_not_found_err(e: sqlx::Error, row_not_found: ServiceError) -> Ser
}
}
#[derive(Debug, PartialEq, Eq)]
pub struct Job {
pub state: JobState,
pub commit_hash: String,
pub id: u32,
pub created_at: OffsetDateTime,
pub scheduled_at: Option<OffsetDateTime>,
pub finished_at: Option<OffsetDateTime>,
}
struct InnerJob {
name: String,
commit_hash: String,
id: i32,
created_at: OffsetDateTime,
scheduled_at: Option<OffsetDateTime>,
finished_at: Option<OffsetDateTime>,
}
impl From<InnerJob> for Job {
fn from(j: InnerJob) -> Self {
Job {
state: (JOB_STATES)
.iter()
.find(|d| d.name == j.name)
.unwrap()
.to_owned()
.to_owned(),
commit_hash: j.commit_hash,
id: j.id as u32,
created_at: j.created_at,
scheduled_at: j.scheduled_at,
finished_at: j.finished_at,
}
}
}
/// map postgres errors to [ServiceError](ServiceError) types
fn map_register_err(e: sqlx::Error) -> ServiceError {
use sqlx::Error;
@ -202,10 +373,7 @@ mod tests {
.unwrap();
assert!(db.ping().await);
const EMAIL: &str = "postgresuser@foo.com";
const EMAIL2: &str = "postgresuser2@foo.com";
const NAME: &str = "postgresuser";
const PASSWORD: &str = "pasdfasdfasdfadf";
const COMMIT_HASH: &str = "pasdfasdfasdfadf";
db.migrate().await.unwrap();
@ -213,5 +381,33 @@ mod tests {
println!("checking job state {}", e.name);
assert!(db.job_state_exists(e).await.unwrap());
}
let _ = db.delete_job(COMMIT_HASH).await;
let auth = db.add_job(COMMIT_HASH).await.unwrap();
let job = db.get_job(COMMIT_HASH).await.unwrap();
assert!(job.created_at < now_unix_time_stamp());
assert!(job.scheduled_at.is_none());
assert!(job.finished_at.is_none());
assert_eq!(
db.get_all_jobs_of_state(&*JOB_STATE_CREATE).await.unwrap(),
vec![job]
);
db.mark_job_scheduled(&auth).await.unwrap();
let job = db.get_job(COMMIT_HASH).await.unwrap();
assert!(job.scheduled_at.is_some());
assert_eq!(
db.get_all_jobs_of_state(&*JOB_STATE_RUNNING).await.unwrap(),
vec![job]
);
db.mark_job_finished(&auth).await.unwrap();
let job = db.get_job(COMMIT_HASH).await.unwrap();
assert!(job.finished_at.is_some());
assert_eq!(
db.get_all_jobs_of_state(&*JOB_STATE_FINISH).await.unwrap(),
vec![job]
);
}
}