mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-31 04:23:40 +00:00
handle flavor atom version range
This commit is contained in:
796
core/Cargo.lock
generated
796
core/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -35,7 +35,7 @@ pub struct CliContextSeed {
|
|||||||
pub base_url: Url,
|
pub base_url: Url,
|
||||||
pub rpc_url: Url,
|
pub rpc_url: Url,
|
||||||
pub registry_url: Option<Url>,
|
pub registry_url: Option<Url>,
|
||||||
pub registry_hostname: Option<InternedString>,
|
pub registry_hostname: Vec<InternedString>,
|
||||||
pub registry_listen: Option<SocketAddr>,
|
pub registry_listen: Option<SocketAddr>,
|
||||||
pub tunnel_addr: Option<SocketAddr>,
|
pub tunnel_addr: Option<SocketAddr>,
|
||||||
pub tunnel_listen: Option<SocketAddr>,
|
pub tunnel_listen: Option<SocketAddr>,
|
||||||
@@ -126,7 +126,7 @@ impl CliContext {
|
|||||||
Ok::<_, Error>(registry)
|
Ok::<_, Error>(registry)
|
||||||
})
|
})
|
||||||
.transpose()?,
|
.transpose()?,
|
||||||
registry_hostname: config.registry_hostname,
|
registry_hostname: config.registry_hostname.unwrap_or_default(),
|
||||||
registry_listen: config.registry_listen,
|
registry_listen: config.registry_listen,
|
||||||
tunnel_addr: config.tunnel,
|
tunnel_addr: config.tunnel,
|
||||||
tunnel_listen: config.tunnel_listen,
|
tunnel_listen: config.tunnel_listen,
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ pub struct ClientConfig {
|
|||||||
#[arg(short = 'r', long)]
|
#[arg(short = 'r', long)]
|
||||||
pub registry: Option<Url>,
|
pub registry: Option<Url>,
|
||||||
#[arg(long)]
|
#[arg(long)]
|
||||||
pub registry_hostname: Option<InternedString>,
|
pub registry_hostname: Option<Vec<InternedString>>,
|
||||||
#[arg(skip)]
|
#[arg(skip)]
|
||||||
pub registry_listen: Option<SocketAddr>,
|
pub registry_listen: Option<SocketAddr>,
|
||||||
#[arg(short = 't', long)]
|
#[arg(short = 't', long)]
|
||||||
|
|||||||
@@ -478,7 +478,7 @@ pub fn make_leaf_cert(
|
|||||||
|
|
||||||
// Google Apple and Mozilla reject certificate horizons longer than 398 days
|
// Google Apple and Mozilla reject certificate horizons longer than 398 days
|
||||||
// https://techbeacon.com/security/google-apple-mozilla-enforce-1-year-max-security-certifications
|
// https://techbeacon.com/security/google-apple-mozilla-enforce-1-year-max-security-certifications
|
||||||
let expiration = Asn1Time::days_from_now(397)?;
|
let expiration = Asn1Time::days_from_now(365)?;
|
||||||
builder.set_not_after(&expiration)?;
|
builder.set_not_after(&expiration)?;
|
||||||
|
|
||||||
builder.set_serial_number(&*rand_serial()?)?;
|
builder.set_serial_number(&*rand_serial()?)?;
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ use clap::Parser;
|
|||||||
use http::HeaderMap;
|
use http::HeaderMap;
|
||||||
use imbl_value::InternedString;
|
use imbl_value::InternedString;
|
||||||
use patch_db::PatchDb;
|
use patch_db::PatchDb;
|
||||||
|
use patch_db::json_ptr::ROOT;
|
||||||
use reqwest::{Client, Proxy};
|
use reqwest::{Client, Proxy};
|
||||||
use rpc_toolkit::yajrc::RpcError;
|
use rpc_toolkit::yajrc::RpcError;
|
||||||
use rpc_toolkit::{CallRemote, Context, Empty, RpcRequest};
|
use rpc_toolkit::{CallRemote, Context, Empty, RpcRequest};
|
||||||
@@ -97,12 +98,12 @@ impl RegistryContext {
|
|||||||
tokio::fs::create_dir_all(&datadir).await?;
|
tokio::fs::create_dir_all(&datadir).await?;
|
||||||
}
|
}
|
||||||
let db_path = datadir.join("registry.db");
|
let db_path = datadir.join("registry.db");
|
||||||
let db = TypedPatchDb::<RegistryDatabase>::load_or_init(
|
let db = TypedPatchDb::<RegistryDatabase>::load_unchecked(PatchDb::open(&db_path).await?);
|
||||||
PatchDb::open(&db_path).await?,
|
if db.dump(&ROOT).await.value.is_null() {
|
||||||
|| async { Ok(RegistryDatabase::init()) },
|
db.put(&ROOT, &RegistryDatabase::init()).await?;
|
||||||
)
|
}
|
||||||
.await?;
|
|
||||||
db.mutate(|db| run_migrations(db)).await.result?;
|
db.mutate(|db| run_migrations(db)).await.result?;
|
||||||
|
|
||||||
let tor_proxy_url = config
|
let tor_proxy_url = config
|
||||||
.tor_proxy
|
.tor_proxy
|
||||||
.clone()
|
.clone()
|
||||||
@@ -170,7 +171,7 @@ impl CallRemote<RegistryContext> for CliContext {
|
|||||||
) -> Result<Value, RpcError> {
|
) -> Result<Value, RpcError> {
|
||||||
let url = if let Some(url) = self.registry_url.clone() {
|
let url = if let Some(url) = self.registry_url.clone() {
|
||||||
url
|
url
|
||||||
} else if self.registry_hostname.is_some() {
|
} else if !self.registry_hostname.is_empty() {
|
||||||
let mut url: Url = format!(
|
let mut url: Url = format!(
|
||||||
"http://{}",
|
"http://{}",
|
||||||
self.registry_listen.unwrap_or(DEFAULT_REGISTRY_LISTEN)
|
self.registry_listen.unwrap_or(DEFAULT_REGISTRY_LISTEN)
|
||||||
@@ -191,7 +192,8 @@ impl CallRemote<RegistryContext> for CliContext {
|
|||||||
method = method.strip_prefix("registry.").unwrap_or(method);
|
method = method.strip_prefix("registry.").unwrap_or(method);
|
||||||
let sig_context = self
|
let sig_context = self
|
||||||
.registry_hostname
|
.registry_hostname
|
||||||
.clone()
|
.get(0)
|
||||||
|
.cloned()
|
||||||
.or_else(|| url.host().as_ref().map(InternedString::from_display));
|
.or_else(|| url.host().as_ref().map(InternedString::from_display));
|
||||||
|
|
||||||
crate::middleware::signature::call_remote(
|
crate::middleware::signature::call_remote(
|
||||||
|
|||||||
@@ -13,8 +13,9 @@ pub trait RegistryMigration {
|
|||||||
pub const MIGRATIONS: &[&dyn RegistryMigration] =
|
pub const MIGRATIONS: &[&dyn RegistryMigration] =
|
||||||
&[&m_00_package_signer_scope::PackageSignerScopeMigration];
|
&[&m_00_package_signer_scope::PackageSignerScopeMigration];
|
||||||
|
|
||||||
|
#[instrument(skip_all)]
|
||||||
pub fn run_migrations(db: &mut Model<RegistryDatabase>) -> Result<(), Error> {
|
pub fn run_migrations(db: &mut Model<RegistryDatabase>) -> Result<(), Error> {
|
||||||
let mut migrations = db.as_migrations().de()?;
|
let mut migrations = db.as_migrations().de().unwrap_or_default();
|
||||||
for migration in MIGRATIONS {
|
for migration in MIGRATIONS {
|
||||||
if !migrations.contains(migration.name()) {
|
if !migrations.contains(migration.name()) {
|
||||||
migration.action(ModelExt::as_value_mut(db))?;
|
migration.action(ModelExt::as_value_mut(db))?;
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ VersionSpec
|
|||||||
= flavor:Flavor? upstream:Version downstream:( ":" Version )? { return { flavor: flavor || null, upstream, downstream: downstream ? downstream[1] : { number: [0], prerelease: [] } } }
|
= flavor:Flavor? upstream:Version downstream:( ":" Version )? { return { flavor: flavor || null, upstream, downstream: downstream ? downstream[1] : { number: [0], prerelease: [] } } }
|
||||||
|
|
||||||
FlavorAtom
|
FlavorAtom
|
||||||
= "#" flavor:Lowercase { return { type: "Flavor", flavor: flavor } }
|
= "#" flavor:FlavorString { return { type: "Flavor", flavor: flavor } }
|
||||||
|
|
||||||
Not = "!" _ value:VersionRangeAtom { return { type: "Not", value: value }}
|
Not = "!" _ value:VersionRangeAtom { return { type: "Not", value: value }}
|
||||||
|
|
||||||
@@ -83,10 +83,10 @@ Emver
|
|||||||
}
|
}
|
||||||
|
|
||||||
Flavor
|
Flavor
|
||||||
= "#" flavor:Lowercase ":" { return flavor }
|
= "#" flavor:FlavorString ":" { return flavor }
|
||||||
|
|
||||||
Lowercase
|
FlavorString
|
||||||
= [a-z]+ { return text() }
|
= [a-z]* { return text() }
|
||||||
|
|
||||||
String
|
String
|
||||||
= [a-zA-Z]+ { return text(); }
|
= [a-zA-Z]+ { return text(); }
|
||||||
|
|||||||
@@ -296,7 +296,7 @@ function peg$parse(input, options) {
|
|||||||
var peg$source = options.grammarSource;
|
var peg$source = options.grammarSource;
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
var peg$startRuleFunctions = { VersionRange: peg$parseVersionRange, Or: peg$parseOr, And: peg$parseAnd, VersionRangeAtom: peg$parseVersionRangeAtom, Parens: peg$parseParens, Anchor: peg$parseAnchor, VersionSpec: peg$parseVersionSpec, FlavorAtom: peg$parseFlavorAtom, Not: peg$parseNot, Any: peg$parseAny, None: peg$parseNone, CmpOp: peg$parseCmpOp, ExtendedVersion: peg$parseExtendedVersion, EmverVersionRange: peg$parseEmverVersionRange, EmverVersionRangeAtom: peg$parseEmverVersionRangeAtom, EmverParens: peg$parseEmverParens, EmverAnchor: peg$parseEmverAnchor, EmverNot: peg$parseEmverNot, Emver: peg$parseEmver, Flavor: peg$parseFlavor, Lowercase: peg$parseLowercase, String: peg$parseString, Version: peg$parseVersion, PreRelease: peg$parsePreRelease, PreReleaseSegment: peg$parsePreReleaseSegment, VersionNumber: peg$parseVersionNumber, Digit: peg$parseDigit, _: peg$parse_ };
|
var peg$startRuleFunctions = { VersionRange: peg$parseVersionRange, Or: peg$parseOr, And: peg$parseAnd, VersionRangeAtom: peg$parseVersionRangeAtom, Parens: peg$parseParens, Anchor: peg$parseAnchor, VersionSpec: peg$parseVersionSpec, FlavorAtom: peg$parseFlavorAtom, Not: peg$parseNot, Any: peg$parseAny, None: peg$parseNone, CmpOp: peg$parseCmpOp, ExtendedVersion: peg$parseExtendedVersion, EmverVersionRange: peg$parseEmverVersionRange, EmverVersionRangeAtom: peg$parseEmverVersionRangeAtom, EmverParens: peg$parseEmverParens, EmverAnchor: peg$parseEmverAnchor, EmverNot: peg$parseEmverNot, Emver: peg$parseEmver, Flavor: peg$parseFlavor, FlavorString: peg$parseFlavorString, String: peg$parseString, Version: peg$parseVersion, PreRelease: peg$parsePreRelease, PreReleaseSegment: peg$parsePreReleaseSegment, VersionNumber: peg$parseVersionNumber, Digit: peg$parseDigit, _: peg$parse_ };
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
var peg$startRuleFunction = peg$parseVersionRange;
|
var peg$startRuleFunction = peg$parseVersionRange;
|
||||||
|
|
||||||
@@ -1161,20 +1161,11 @@ peg$parseFlavorAtom() {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
if (s1 !== peg$FAILED) {
|
if (s1 !== peg$FAILED) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
s2 = peg$parseLowercase();
|
s2 = peg$parseFlavorString();
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
if (s2 !== peg$FAILED) {
|
peg$savedPos = s0;
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
peg$savedPos = s0;
|
s0 = peg$f3(s2);
|
||||||
// @ts-ignore
|
|
||||||
s0 = peg$f3(s2);
|
|
||||||
// @ts-ignore
|
|
||||||
} else {
|
|
||||||
// @ts-ignore
|
|
||||||
peg$currPos = s0;
|
|
||||||
// @ts-ignore
|
|
||||||
s0 = peg$FAILED;
|
|
||||||
}
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
} else {
|
} else {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
@@ -2092,35 +2083,26 @@ peg$parseFlavor() {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
if (s1 !== peg$FAILED) {
|
if (s1 !== peg$FAILED) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
s2 = peg$parseLowercase();
|
s2 = peg$parseFlavorString();
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
if (s2 !== peg$FAILED) {
|
if (input.charCodeAt(peg$currPos) === 58) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
if (input.charCodeAt(peg$currPos) === 58) {
|
s3 = peg$c4;
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
s3 = peg$c4;
|
peg$currPos++;
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
peg$currPos++;
|
} else {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
} else {
|
s3 = peg$FAILED;
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
s3 = peg$FAILED;
|
if (peg$silentFails === 0) { peg$fail(peg$e4); }
|
||||||
|
}
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
if (peg$silentFails === 0) { peg$fail(peg$e4); }
|
if (s3 !== peg$FAILED) {
|
||||||
}
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
if (s3 !== peg$FAILED) {
|
peg$savedPos = s0;
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
peg$savedPos = s0;
|
s0 = peg$f21(s2);
|
||||||
// @ts-ignore
|
|
||||||
s0 = peg$f21(s2);
|
|
||||||
// @ts-ignore
|
|
||||||
} else {
|
|
||||||
// @ts-ignore
|
|
||||||
peg$currPos = s0;
|
|
||||||
// @ts-ignore
|
|
||||||
s0 = peg$FAILED;
|
|
||||||
}
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
} else {
|
} else {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
@@ -2142,7 +2124,7 @@ peg$parseFlavor() {
|
|||||||
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
function // @ts-ignore
|
function // @ts-ignore
|
||||||
peg$parseLowercase() {
|
peg$parseFlavorString() {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
var s0, s1, s2;
|
var s0, s1, s2;
|
||||||
|
|
||||||
@@ -2164,37 +2146,27 @@ peg$parseLowercase() {
|
|||||||
if (peg$silentFails === 0) { peg$fail(peg$e17); }
|
if (peg$silentFails === 0) { peg$fail(peg$e17); }
|
||||||
}
|
}
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
if (s2 !== peg$FAILED) {
|
while (s2 !== peg$FAILED) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
while (s2 !== peg$FAILED) {
|
s1.push(s2);
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
s1.push(s2);
|
if (peg$r0.test(input.charAt(peg$currPos))) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
if (peg$r0.test(input.charAt(peg$currPos))) {
|
s2 = input.charAt(peg$currPos);
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
s2 = input.charAt(peg$currPos);
|
peg$currPos++;
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
peg$currPos++;
|
} else {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
} else {
|
s2 = peg$FAILED;
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
s2 = peg$FAILED;
|
if (peg$silentFails === 0) { peg$fail(peg$e17); }
|
||||||
// @ts-ignore
|
|
||||||
if (peg$silentFails === 0) { peg$fail(peg$e17); }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// @ts-ignore
|
|
||||||
} else {
|
|
||||||
// @ts-ignore
|
|
||||||
s1 = peg$FAILED;
|
|
||||||
}
|
}
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
if (s1 !== peg$FAILED) {
|
peg$savedPos = s0;
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
peg$savedPos = s0;
|
s1 = peg$f22();
|
||||||
// @ts-ignore
|
|
||||||
s1 = peg$f22();
|
|
||||||
}
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
s0 = s1;
|
s0 = s1;
|
||||||
|
|
||||||
@@ -2822,7 +2794,7 @@ peggyParser.SyntaxError.prototype.name = "PeggySyntaxError";
|
|||||||
|
|
||||||
export interface ParseOptions {
|
export interface ParseOptions {
|
||||||
filename?: string;
|
filename?: string;
|
||||||
startRule?: "VersionRange" | "Or" | "And" | "VersionRangeAtom" | "Parens" | "Anchor" | "VersionSpec" | "FlavorAtom" | "Not" | "Any" | "None" | "CmpOp" | "ExtendedVersion" | "EmverVersionRange" | "EmverVersionRangeAtom" | "EmverParens" | "EmverAnchor" | "EmverNot" | "Emver" | "Flavor" | "Lowercase" | "String" | "Version" | "PreRelease" | "PreReleaseSegment" | "VersionNumber" | "Digit" | "_";
|
startRule?: "VersionRange" | "Or" | "And" | "VersionRangeAtom" | "Parens" | "Anchor" | "VersionSpec" | "FlavorAtom" | "Not" | "Any" | "None" | "CmpOp" | "ExtendedVersion" | "EmverVersionRange" | "EmverVersionRangeAtom" | "EmverParens" | "EmverAnchor" | "EmverNot" | "Emver" | "Flavor" | "FlavorString" | "String" | "Version" | "PreRelease" | "PreReleaseSegment" | "VersionNumber" | "Digit" | "_";
|
||||||
tracer?: any;
|
tracer?: any;
|
||||||
[key: string]: any;
|
[key: string]: any;
|
||||||
}
|
}
|
||||||
@@ -2850,7 +2822,7 @@ export type ParseFunction = <Options extends ParseOptions>(
|
|||||||
StartRule extends "EmverNot" ? EmverNot :
|
StartRule extends "EmverNot" ? EmverNot :
|
||||||
StartRule extends "Emver" ? Emver :
|
StartRule extends "Emver" ? Emver :
|
||||||
StartRule extends "Flavor" ? Flavor :
|
StartRule extends "Flavor" ? Flavor :
|
||||||
StartRule extends "Lowercase" ? Lowercase_1 :
|
StartRule extends "FlavorString" ? FlavorString :
|
||||||
StartRule extends "String" ? String_1 :
|
StartRule extends "String" ? String_1 :
|
||||||
StartRule extends "Version" ? Version :
|
StartRule extends "Version" ? Version :
|
||||||
StartRule extends "PreRelease" ? PreRelease :
|
StartRule extends "PreRelease" ? PreRelease :
|
||||||
@@ -2884,7 +2856,7 @@ export type VersionSpec = {
|
|||||||
upstream: Version;
|
upstream: Version;
|
||||||
downstream: any;
|
downstream: any;
|
||||||
};
|
};
|
||||||
export type FlavorAtom = { type: "Flavor"; flavor: Lowercase_1 };
|
export type FlavorAtom = { type: "Flavor"; flavor: FlavorString };
|
||||||
export type Not = { type: "Not"; value: VersionRangeAtom };
|
export type Not = { type: "Not"; value: VersionRangeAtom };
|
||||||
export type Any = { type: "Any" };
|
export type Any = { type: "Any" };
|
||||||
export type None = { type: "None" };
|
export type None = { type: "None" };
|
||||||
@@ -2916,8 +2888,8 @@ export type Emver = {
|
|||||||
upstream: { number: [Digit, Digit, Digit]; prerelease: [] };
|
upstream: { number: [Digit, Digit, Digit]; prerelease: [] };
|
||||||
downstream: { number: [0 | NonNullable<Digit | null>]; prerelease: [] };
|
downstream: { number: [0 | NonNullable<Digit | null>]; prerelease: [] };
|
||||||
};
|
};
|
||||||
export type Flavor = Lowercase_1;
|
export type Flavor = FlavorString;
|
||||||
export type Lowercase_1 = string;
|
export type FlavorString = string;
|
||||||
export type String_1 = string;
|
export type String_1 = string;
|
||||||
export type Version = {
|
export type Version = {
|
||||||
number: VersionNumber;
|
number: VersionNumber;
|
||||||
|
|||||||
@@ -873,7 +873,7 @@ export class ExtendedVersion {
|
|||||||
static parse(extendedVersion: string): ExtendedVersion {
|
static parse(extendedVersion: string): ExtendedVersion {
|
||||||
const parsed = P.parse(extendedVersion, { startRule: "ExtendedVersion" })
|
const parsed = P.parse(extendedVersion, { startRule: "ExtendedVersion" })
|
||||||
return new ExtendedVersion(
|
return new ExtendedVersion(
|
||||||
parsed.flavor,
|
parsed.flavor || null,
|
||||||
new Version(parsed.upstream.number, parsed.upstream.prerelease),
|
new Version(parsed.upstream.number, parsed.upstream.prerelease),
|
||||||
new Version(parsed.downstream.number, parsed.downstream.prerelease),
|
new Version(parsed.downstream.number, parsed.downstream.prerelease),
|
||||||
)
|
)
|
||||||
@@ -883,7 +883,7 @@ export class ExtendedVersion {
|
|||||||
try {
|
try {
|
||||||
const parsed = P.parse(extendedVersion, { startRule: "Emver" })
|
const parsed = P.parse(extendedVersion, { startRule: "Emver" })
|
||||||
return new ExtendedVersion(
|
return new ExtendedVersion(
|
||||||
parsed.flavor,
|
parsed.flavor || null,
|
||||||
new Version(parsed.upstream.number, parsed.upstream.prerelease),
|
new Version(parsed.upstream.number, parsed.upstream.prerelease),
|
||||||
new Version(parsed.downstream.number, parsed.downstream.prerelease),
|
new Version(parsed.downstream.number, parsed.downstream.prerelease),
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user