Skip to content

Commit ce14f5a

Browse files
authored
Merge pull request #88 from kpcyrd/new-sync
Prepare building once per pkgbase
2 parents db41217 + 4d72690 commit ce14f5a

File tree

26 files changed

+787
-664
lines changed

26 files changed

+787
-664
lines changed

Cargo.lock

Lines changed: 82 additions & 102 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Dockerfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ RUN --mount=type=cache,target=/var/cache/buildkit \
1212
/var/cache/buildkit/target/release/rebuildctl /
1313

1414
FROM alpine:3.14
15-
ENV HTTP_ADDR=0.0.0.0:8484
1615
RUN apk add --no-cache libgcc openssl dpkg sqlite-libs xz zstd-libs
1716
COPY --from=0 \
1817
/rebuilderd /rebuildctl \
1918
/usr/local/bin/
19+
ENV HTTP_ADDR=0.0.0.0:8484
20+
ENV REBUILDERD_COOKIE_PATH=/secret/auth
2021
VOLUME ["/data", "/secret"]
2122
WORKDIR /data
2223
CMD ["rebuilderd"]

PKGBUILD

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ package_rebuilderd() {
5454
install -Dm 644 contrib/systemd/rebuilderd.tmpfiles "${pkgdir}/usr/lib/tmpfiles.d/rebuilderd.conf"
5555

5656
# install docs
57-
install -Dm 644 README.md -t "${pkgdir}/usr/share/doc/${pkgname}"
5857
install -Dm 644 -t "${pkgdir}/usr/share/man/man1" \
5958
contrib/docs/rebuilderd.1 \
6059
contrib/docs/rebuilderd-worker.1

common/Cargo.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ edition = "2018"
1313
anyhow = "1.0.32"
1414
log = "0.4"
1515
serde = { version="1.0", features=["derive"] }
16-
strum = "0.21"
17-
strum_macros = "0.21"
1816
reqwest = { version="0.11", features=["blocking", "json"] }
1917
chrono = { version = "0.4", features=["serde"] }
2018
colored = "2"

common/src/api.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use chrono::prelude::*;
22
use crate::config::ConfigFile;
33
use crate::errors::*;
4-
use crate::{PkgRelease, PkgGroup, Status};
4+
use crate::{PkgRelease, PkgArtifact, PkgGroup, Status};
55
use crate::auth;
66
use reqwest::{Client as HttpClient, RequestBuilder};
77
use serde::{Serialize, Deserialize};
@@ -300,7 +300,7 @@ pub enum JobAssignment {
300300
pub struct SuiteImport {
301301
pub distro: String,
302302
pub suite: String,
303-
pub pkgs: Vec<PkgGroup>,
303+
pub groups: Vec<PkgGroup>,
304304
}
305305

306306
#[derive(Debug, Serialize, Deserialize)]
@@ -321,7 +321,7 @@ pub struct QueueList {
321321
#[derive(Debug, PartialEq, Serialize, Deserialize)]
322322
pub struct QueueItem {
323323
pub id: i32,
324-
pub package: PkgRelease,
324+
pub pkgbase: PkgGroup,
325325
pub version: String,
326326
pub queued_at: NaiveDateTime,
327327
pub worker_id: Option<i32>,
@@ -393,7 +393,7 @@ impl Rebuild {
393393
#[derive(Debug, Serialize, Deserialize)]
394394
pub struct BuildReport {
395395
pub queue: QueueItem,
396-
pub rebuild: Rebuild,
396+
pub rebuilds: Vec<(PkgArtifact, Rebuild)>,
397397
}
398398

399399
#[derive(Debug, Serialize, Deserialize)]

common/src/lib.rs

Lines changed: 11 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use crate::errors::*;
22
use colored::*;
33
use chrono::NaiveDateTime;
4-
use strum_macros::{EnumString, AsRefStr, Display};
54
use serde::{Serialize, Deserialize};
65
use std::iter::FromIterator;
76
use std::ops::Deref;
@@ -13,23 +12,6 @@ pub mod config;
1312
pub mod errors;
1413
pub mod utils;
1514

16-
#[derive(Debug, Clone, Copy, PartialEq, Display, EnumString, AsRefStr, Serialize, Deserialize)]
17-
#[strum(serialize_all = "kebab-case")]
18-
#[serde(rename_all = "kebab-case")]
19-
pub enum VersionCmp {
20-
Basic,
21-
Debian,
22-
}
23-
24-
impl VersionCmp {
25-
pub fn detect_from_distro(distro: &str) -> VersionCmp {
26-
match distro {
27-
"debian" => VersionCmp::Debian,
28-
_ => VersionCmp::Basic,
29-
}
30-
}
31-
}
32-
3315
#[derive(Debug, PartialEq, Serialize, Deserialize)]
3416
pub struct PkgRelease {
3517
pub name: String,
@@ -39,16 +21,14 @@ pub struct PkgRelease {
3921
pub suite: String,
4022
pub architecture: String,
4123
pub artifact_url: String,
42-
pub input_url: Option<String>,
4324
pub build_id: Option<i32>,
4425
pub built_at: Option<NaiveDateTime>,
4526
pub has_diffoscope: bool,
4627
pub has_attestation: bool,
47-
pub next_retry: Option<NaiveDateTime>,
4828
}
4929

5030
impl PkgRelease {
51-
pub fn new(name: String, version: String, distro: String, suite: String, architecture: String, artifact_url: String, input_url: Option<String>) -> PkgRelease {
31+
pub fn new(name: String, version: String, distro: String, suite: String, architecture: String, artifact_url: String) -> PkgRelease {
5232
PkgRelease {
5333
name,
5434
version,
@@ -57,45 +37,43 @@ impl PkgRelease {
5737
suite,
5838
architecture,
5939
artifact_url,
60-
input_url,
6140
build_id: None,
6241
built_at: None,
6342
has_diffoscope: false,
6443
has_attestation: false,
65-
next_retry: None,
6644
}
6745
}
6846
}
6947

70-
#[derive(Debug, PartialEq, Serialize, Deserialize)]
48+
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
7149
pub struct PkgGroup {
72-
pub base: String,
50+
pub name: String,
7351
pub version: String,
7452

7553
pub distro: String,
7654
pub suite: String,
7755
pub architecture: String,
7856

79-
pub input: Option<String>,
57+
pub input_url: Option<String>,
8058
pub artifacts: Vec<PkgArtifact>,
8159
}
8260

83-
#[derive(Debug, PartialEq, Serialize, Deserialize)]
61+
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
8462
pub struct PkgArtifact {
8563
pub name: String,
8664
pub version: String,
8765
pub url: String,
8866
}
8967

9068
impl PkgGroup {
91-
pub fn new(base: String, version: String, distro: String, suite: String, architecture: String, input: Option<String>) -> PkgGroup {
69+
pub fn new(name: String, version: String, distro: String, suite: String, architecture: String, input_url: Option<String>) -> PkgGroup {
9270
PkgGroup {
93-
base,
71+
name,
9472
version,
9573
distro,
9674
suite,
9775
architecture,
98-
input,
76+
input_url,
9977
artifacts: Vec::new(),
10078
}
10179
}
@@ -104,9 +82,9 @@ impl PkgGroup {
10482
self.artifacts.push(artifact);
10583
}
10684

107-
pub fn input(&self) -> Result<&str> {
108-
if let Some(input) = &self.input {
109-
Ok(input.as_str())
85+
pub fn input_url(&self) -> Result<&str> {
86+
if let Some(input_url) = &self.input_url {
87+
Ok(input_url.as_str())
11088
} else if !self.artifacts.is_empty() {
11189
let mut artifacts = Vec::from_iter(self.artifacts.iter().collect::<Vec<_>>());
11290
artifacts.sort_by_key(|a| &a.name);

daemon/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ diesel_migrations = { version = "1.3.0", features = ["sqlite"] }
2626
dirs-next = "2"
2727
dotenv = "0.15"
2828
env_logger = "0.9"
29+
log = "0.4.14"
2930
rand = "0.8"
3031
rebuilderd-common = { version= "=0.15.0", path="../common" }
3132
serde = { version="1.0", features=["derive"] }
33+
serde_json = "1.0.71"
3234
structopt = "0.3"
3335
toml = "0.5.6"
3436

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
DROP TABLE queue;
2+
3+
CREATE TABLE queue (
4+
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
5+
package_id INTEGER NOT NULL,
6+
version VARCHAR NOT NULL,
7+
required_backend VARCHAR NOT NULL,
8+
priority INTEGER NOT NULL,
9+
queued_at DATETIME NOT NULL,
10+
worker_id INTEGER,
11+
started_at DATETIME,
12+
last_ping DATETIME,
13+
FOREIGN KEY(package_id) REFERENCES packages(id) ON DELETE CASCADE,
14+
FOREIGN KEY(worker_id) REFERENCES workers(id) ON DELETE SET NULL,
15+
CONSTRAINT queue_unique UNIQUE (package_id, version)
16+
);
17+
18+
CREATE UNIQUE INDEX queue_pop_idx ON queue(required_backend, priority, queued_at, id);
19+
20+
PRAGMA foreign_keys=off;
21+
22+
CREATE TABLE _pkgbases_new (
23+
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
24+
name VARCHAR NOT NULL,
25+
version VARCHAR NOT NULL,
26+
distro VARCHAR NOT NULL,
27+
suite VARCHAR NOT NULL,
28+
architecture VARCHAR NOT NULL,
29+
retries INTEGER NOT NULL,
30+
next_retry DATETIME,
31+
CONSTRAINT pkgbase_unique UNIQUE (name, version, distro, suite, architecture)
32+
);
33+
34+
INSERT INTO _pkgbases_new (id, name, version, distro, suite, architecture, retries, next_retry)
35+
SELECT id, name, version, distro, suite, architecture, retries, next_retry
36+
FROM pkgbases;
37+
38+
DROP TABLE pkgbases;
39+
ALTER TABLE _pkgbases_new RENAME TO pkgbases;
40+
41+
PRAGMA foreign_keys=on;
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
DROP TABLE queue;
2+
3+
CREATE TABLE queue (
4+
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
5+
pkgbase_id INTEGER NOT NULL,
6+
version VARCHAR NOT NULL,
7+
required_backend VARCHAR NOT NULL,
8+
priority INTEGER NOT NULL,
9+
queued_at DATETIME NOT NULL,
10+
worker_id INTEGER,
11+
started_at DATETIME,
12+
last_ping DATETIME,
13+
FOREIGN KEY(pkgbase_id) REFERENCES pkgbases(id) ON DELETE CASCADE,
14+
FOREIGN KEY(worker_id) REFERENCES workers(id) ON DELETE SET NULL,
15+
CONSTRAINT queue_unique UNIQUE (pkgbase_id, version)
16+
);
17+
18+
CREATE UNIQUE INDEX queue_pop_idx ON queue(required_backend, priority, queued_at, id);
19+
20+
PRAGMA foreign_keys=off;
21+
22+
CREATE TABLE _pkgbases_new (
23+
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
24+
name VARCHAR NOT NULL,
25+
version VARCHAR NOT NULL,
26+
distro VARCHAR NOT NULL,
27+
suite VARCHAR NOT NULL,
28+
architecture VARCHAR NOT NULL,
29+
input_url VARCHAR,
30+
artifacts VARCHAR NOT NULL,
31+
retries INTEGER NOT NULL,
32+
next_retry DATETIME,
33+
CONSTRAINT pkgbase_unique UNIQUE (name, version, distro, suite, architecture)
34+
);
35+
36+
INSERT INTO _pkgbases_new (id, name, version, distro, suite, architecture, artifacts, retries, next_retry)
37+
SELECT id, name, version, distro, suite, architecture, "[]", retries, next_retry
38+
FROM pkgbases;
39+
40+
DROP TABLE pkgbases;
41+
ALTER TABLE _pkgbases_new RENAME TO pkgbases;
42+
43+
PRAGMA foreign_keys=on;
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
PRAGMA foreign_keys=off;
2+
3+
CREATE TABLE _packages_new (
4+
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
5+
base_id INTEGER,
6+
name VARCHAR NOT NULL,
7+
version VARCHAR NOT NULL,
8+
status VARCHAR NOT NULL,
9+
distro VARCHAR NOT NULL,
10+
suite VARCHAR NOT NULL,
11+
architecture VARCHAR NOT NULL,
12+
artifact_url VARCHAR NOT NULL,
13+
input_url VARCHAR,
14+
build_id INTEGER,
15+
built_at DATETIME,
16+
has_diffoscope BOOLEAN NOT NULL,
17+
has_attestation BOOLEAN NOT NULL,
18+
checksum VARCHAR,
19+
retries INTEGER NOT NULL,
20+
next_retry DATETIME,
21+
CONSTRAINT packages_unique UNIQUE (name, distro, suite, architecture),
22+
FOREIGN KEY(base_id) REFERENCES pkgbases(id),
23+
FOREIGN KEY(build_id) REFERENCES builds(id)
24+
);
25+
26+
INSERT INTO _packages_new (id, base_id, name, version, status, distro, suite, architecture, artifact_url, build_id, built_at, has_diffoscope, has_attestation, checksum, retries)
27+
SELECT id, pkgbase_id, name, version, status, distro, suite, architecture, artifact_url, build_id, built_at, has_diffoscope, has_attestation, checksum, 0
28+
FROM packages;
29+
30+
DROP TABLE packages;
31+
ALTER TABLE _packages_new RENAME TO packages;
32+
33+
PRAGMA foreign_keys=on;

0 commit comments

Comments
 (0)