Compare commits

...
This repository has been archived on 2021-12-24. You can view files and clone it, but cannot push or open issues/pull-requests.

23 Commits

Author SHA1 Message Date
Jef Roosens e8c897fb51 Merge pull request 'Update alpine Docker tag to v3.15' (#9) from renovate/alpine-3.x into develop
Reviewed-on: #9
2021-12-24 09:05:47 +01:00
Jef Roosens 10f36b8ea3 Merge pull request 'Update Rust crate diesel to 1.4.8' (#14) from renovate/diesel-1.x into develop
Reviewed-on: #14
2021-12-24 09:05:26 +01:00
Jef Roosens 8822c1f4e8 Merge pull request 'Update rust Docker tag to v1.57' (#13) from renovate/rust-1.x into develop
Reviewed-on: #13
2021-12-24 09:05:18 +01:00
Renovate Bot c908dc7e9c Update rust Docker tag to v1.57 2021-12-24 08:02:03 +00:00
Renovate Bot 3311fd2373 Update alpine Docker tag to v3.15 2021-12-24 08:02:01 +00:00
Renovate Bot d76a501c35 Update Rust crate diesel to 1.4.8 2021-12-24 08:01:59 +00:00
Jef Roosens 02fe8d2de7 Merge pull request 'Integrated Diesel into project' (#11) from diesel-setup into develop
continuous-integration/drone the build was successful Details
Reviewed-on: https://git.roosens.me/Chewing_Bever/hilde/pulls/11
2021-06-27 15:12:08 +02:00
Jef Roosens de38073f71
Fixed linting errors
continuous-integration/drone the build was successful Details
2021-06-27 15:00:55 +02:00
Jef Roosens 424e723cd8
Migrations now run on startup
continuous-integration/drone the build failed Details
2021-06-27 12:15:54 +02:00
Jef Roosens 569e9c935b
Added deps for using Diesel in Rocket 2021-06-27 11:36:54 +02:00
Jef Roosens 0326f6e0fd
Updated README
continuous-integration/drone the build was successful Details
2021-06-27 11:15:58 +02:00
Jef Roosens 72c7be055a
Initialized Diesel in project 2021-06-27 11:11:01 +02:00
Jef Roosens 92d1b1c011 Merge pull request 'Update rust Docker tag to v1.53' (#10) from renovate/rust-1.x into develop
continuous-integration/drone the build was successful Details
Reviewed-on: https://git.roosens.me/Chewing_Bever/hilde/pulls/10
2021-06-27 11:04:00 +02:00
Renovate Bot 1c7ae8cf41 Update rust Docker tag to v1.53
continuous-integration/drone the build was successful Details
2021-06-25 12:00:41 +00:00
Jef Roosens 9286a9821c Merge pull request 'Devop setup' (#8) from feature/devop-env into develop
continuous-integration/drone the build was successful Details
Reviewed-on: https://git.roosens.me/Chewing_Bever/hilde/pulls/8
2021-06-25 13:03:17 +02:00
Jef Roosens ad52210736
Added Makefile-specific editorconfig
continuous-integration/drone the build was successful Details
2021-06-25 13:00:57 +02:00
Jef Roosens 49007e7a8f
Added missing .PHONY [CI SKIP] 2021-06-25 12:51:17 +02:00
Jef Roosens 68a19258d4
Added Makefile for setting up db
continuous-integration/drone the build was successful Details
2021-06-25 12:48:45 +02:00
Jef Roosens 89bc9b91e1
Added editorconfig file
continuous-integration/drone the build was successful Details
2021-06-25 12:07:33 +02:00
Jef Roosens fa5ee06a04
Added linting deps to ci
continuous-integration/drone the build was successful Details
2021-06-25 11:37:45 +02:00
Jef Roosens 0eeea1e593
Added build dependencies to CI and Dockerfile
continuous-integration/drone the build failed Details
2021-06-25 11:32:50 +02:00
Jef Roosens a696888e11
Added Woodpecker CI config
continuous-integration/drone the build failed Details
2021-06-19 12:14:57 +02:00
Jef Roosens 6e19ac5a63
Started Dockerfile 2021-06-19 11:54:46 +02:00
15 changed files with 422 additions and 18 deletions

5
.dockerignore 100644
View File

@ -0,0 +1,5 @@
*
!Cargo.toml
!Cargo.lock
!src/

13
.editorconfig 100644
View File

@ -0,0 +1,13 @@
root = true
[*]
end_of_line = lf
insert_final_newline = false
indent_size = 4
indent_style = space
[*.{yml,yaml}]
indent_size = 2
[Makefile]
indent_style = tab

2
.env 100644
View File

@ -0,0 +1,2 @@
# This file is solely used by Diesel
DATABASE_URL=postgres://hilde:hilde@localhost/hilde

77
.woodpecker.yml 100644
View File

@ -0,0 +1,77 @@
pipeline:
# Download the cache from S3
restore-cache:
image: plugins/s3-cache
pull: true
endpoint: https://s3.roosens.me
root: build-cache/
restore: true
secrets: [ cache_s3_access_key, cache_s3_secret_key ]
# =====BUILDING=====
build-backend:
image: rust:1.53-alpine
pull: true
group: build
environment:
- CARGO_HOME=.cargo
commands:
- apk add musl-dev postgresql-dev
- cargo build
# =====TESTING=====
test-backend:
image: rust:1.53-alpine
environment:
- CARGO_HOME=.cargo
commands:
- apk add musl-dev postgresql-dev
- cargo test
# =====LINTING=====
lint-backend:
image: rust:1.53-alpine
group: lint
environment:
- CARGO_HOME=.cargo
commands:
- apk add musl-dev postgresql-dev
- rustup component add rustfmt clippy
- cargo fmt -- --check
# This is run here because it requires compilation
- cargo clippy --all-targets -- -D warnings
# =====REBUILD & FLUSH CACHE=====
rebuild-cache:
image: plugins/s3-cache
endpoint: https://s3.roosens.me
root: build-cache/
rebuild: true
mount:
- target
- .cargo
secrets: [ cache_s3_access_key, cache_s3_secret_key ]
# Push the cache, even on failure
when:
status: [ success, failure ]
flush-cache:
image: plugins/s3-cache
endpoint: https://s3.roosens.me
root: build-cache/
flush: true
flush_age: 14
secrets: [ cache_s3_access_key, cache_s3_secret_key ]
# Push the cache, even on failure
when:
status: [ success, failure ]

151
Cargo.lock generated
View File

@ -84,6 +84,12 @@ version = "3.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631"
[[package]]
name = "byteorder"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
[[package]]
name = "bytes"
version = "1.0.1"
@ -170,6 +176,40 @@ dependencies = [
"syn",
]
[[package]]
name = "diesel"
version = "1.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b28135ecf6b7d446b43e27e225622a038cc4e2930a1022f51cdb97ada19b8e4d"
dependencies = [
"bitflags",
"byteorder",
"diesel_derives",
"pq-sys",
"r2d2",
]
[[package]]
name = "diesel_derives"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "diesel_migrations"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf3cde8413353dc7f5d72fa8ce0b99a560a359d2c5ef1e5817ca731cd9008f4c"
dependencies = [
"migrations_internals",
"migrations_macros",
]
[[package]]
name = "discard"
version = "1.0.4"
@ -193,9 +233,9 @@ dependencies = [
[[package]]
name = "figment"
version = "0.10.5"
version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ca029e813a72b7526d28273d25f3e4a2f365d1b7a1018a6f93ec9053a119763"
checksum = "790b4292c72618abbab50f787a477014fe15634f96291de45672ce46afe122df"
dependencies = [
"atomic",
"pear",
@ -362,9 +402,9 @@ checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
[[package]]
name = "hermit-abi"
version = "0.1.18"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
dependencies = [
"libc",
]
@ -373,7 +413,10 @@ dependencies = [
name = "hilde"
version = "0.1.0"
dependencies = [
"diesel",
"diesel_migrations",
"rocket",
"rocket_sync_db_pools",
]
[[package]]
@ -515,6 +558,27 @@ version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc"
[[package]]
name = "migrations_internals"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b4fc84e4af020b837029e017966f86a1c2d5e83e64b589963d5047525995860"
dependencies = [
"diesel",
]
[[package]]
name = "migrations_macros"
version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9753f12909fd8d923f75ae5c3258cae1ed3c8ec052e1b38c93c21a6d157f789c"
dependencies = [
"migrations_internals",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "mime"
version = "0.3.16"
@ -645,9 +709,9 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
[[package]]
name = "pin-project-lite"
version = "0.2.6"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc0e1f259c92177c30a4c9d177246edd0a3568b25756a977d0632cf8fa37e905"
checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"
[[package]]
name = "pin-utils"
@ -661,6 +725,15 @@ version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
[[package]]
name = "pq-sys"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ac25eee5a0582f45a67e837e350d784e7003bd29a5f460796772061ca49ffda"
dependencies = [
"vcpkg",
]
[[package]]
name = "proc-macro-hack"
version = "0.5.19"
@ -704,6 +777,17 @@ dependencies = [
"proc-macro2",
]
[[package]]
name = "r2d2"
version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "545c5bc2b880973c9c10e4067418407a0ccaa3091781d1671d46eb35107cb26f"
dependencies = [
"log",
"parking_lot",
"scheduled-thread-pool",
]
[[package]]
name = "rand"
version = "0.8.4"
@ -746,9 +830,9 @@ dependencies = [
[[package]]
name = "redox_syscall"
version = "0.2.8"
version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "742739e41cd49414de871ea5e549afb7e2a3ac77b589bcbebe8c82fab37147fc"
checksum = "5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee"
dependencies = [
"bitflags",
]
@ -864,6 +948,30 @@ dependencies = [
"uncased",
]
[[package]]
name = "rocket_sync_db_pools"
version = "0.1.0-rc.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38cfdfebd552d075c368e641c88a5cd6ce1c58c5c710548aeb777abb48830f4b"
dependencies = [
"diesel",
"r2d2",
"rocket",
"rocket_sync_db_pools_codegen",
"serde",
"tokio",
]
[[package]]
name = "rocket_sync_db_pools_codegen"
version = "0.1.0-rc.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5267808c094db5366e1d8925aaf9f2ce05ff9b3bd92cb18c7040a1fe219c2e25"
dependencies = [
"devise",
"quote",
]
[[package]]
name = "rustc_version"
version = "0.2.3"
@ -885,6 +993,15 @@ version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
[[package]]
name = "scheduled-thread-pool"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc6f74fd1204073fa02d5d5d68bec8021be4c38690b61264b2fdb48083d0e7d7"
dependencies = [
"parking_lot",
]
[[package]]
name = "scoped-tls"
version = "1.0.0"
@ -982,9 +1099,9 @@ dependencies = [
[[package]]
name = "spin"
version = "0.9.0"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b87bbf98cb81332a56c1ee8929845836f85e8ddd693157c30d76660196014478"
checksum = "f5fdd7196b4ae35a111c6dc97f9cc152ca3ea8ad744f7cb46a9f27b3ef8f2f54"
[[package]]
name = "stable-pattern"
@ -1006,9 +1123,9 @@ dependencies = [
[[package]]
name = "state"
version = "0.5.1"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b54c22963194db84a59ee48e1fa9ed6c1fa9909ad5db92a700aa6fe956d632b"
checksum = "87cf4f5369e6d3044b5e365c9690f451516ac8f0954084622b49ea3fde2f6de5"
dependencies = [
"loom",
]
@ -1127,9 +1244,9 @@ dependencies = [
[[package]]
name = "tokio"
version = "1.7.0"
version = "1.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c79ba603c337335df6ba6dd6afc38c38a7d5e1b0c871678439ea973cd62a118e"
checksum = "5fb2ed024293bb19f7a5dc54fe83bf86532a44c12a2bb8ba40d64a4509395ca2"
dependencies = [
"autocfg",
"bytes",
@ -1262,6 +1379,12 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
[[package]]
name = "vcpkg"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]]
name = "version_check"
version = "0.9.3"

View File

@ -1,10 +1,17 @@
[package]
name = "hilde"
version = "0.1.0"
authors = ["jjr <roosensjef@gmail.com>"]
authors = ["Jef Roosens <roosensjef@gmail.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
rocket = "0.5.0-rc.1"
diesel = { version = "1.4.8", features = ["postgres"] }
diesel_migrations = "1.4.0"
[dependencies.rocket_sync_db_pools]
version = "0.1.0-rc.1"
default_features = false
features = ["diesel_postgres_pool"]

22
Dockerfile 100644
View File

@ -0,0 +1,22 @@
FROM rust:1.57-alpine3.13 AS builder
WORKDIR /src
# Install build dependencies
RUN apk add --no-cache \
musl-dev \
postgresql-dev
# Copy over source code
COPY Cargo.toml Cargo.lock ./
COPY src ./src/
RUN cargo build \
--release
FROM alpine:3.15
COPY --from=builder /src/target/release/hilde /usr/local/bin/hilde
ENTRYPOINT [ "/usr/local/bin/hilde" ]

59
Makefile 100644
View File

@ -0,0 +1,59 @@
# The main usecase for this Makefile is to simplify database management
all: build
.PHONY: all
# =====CARGO STUFF=====
build:
@ cargo build
.PHONY: build
run:
@ cargo run
.PHONY: run
test:
@ cargo test
.PHONY: test
lint:
@ cargo fmt -- --check
@ cargo clippy --all-targets -- -D warnings
.PHONY: lint
format:
@ cargo fmt
.PHONY: format
# =====DATABASE STUFF=====
db:
@ docker run \
--rm \
-itd \
-v hilde_db-data:/var/lib/postgresql/data \
-e POSTGRES_USER=hilde \
-e POSTGRES_PASSWORD=hilde \
-e POSTGRES_DB=hilde \
--name hilde_db \
-p 5432:5432 \
postgres:13-alpine
.PHONY: db
psql:
@ docker exec \
-it hilde_db \
psql -U hilde
.PHONY: psql
stop-db:
@ docker stop hilde_db
.PHONY: stop-db
# =====DOCKER STUFF=====
image:
@ docker build -t hilde:latest .
.PHONY: image

View File

@ -1,3 +1,19 @@
# hilde
A server implementation of a Debian repository.
A server implementation of a Debian repository.
## Development
To develop this project, you'll need a few things:
* Docker (for setting up the database)
* Cargo & Rust stable (all hail Rocket v0.5)
* The PostgreSQL dev libraries (to compile Diesel)
That's the ones I can think of right now. If I think of any others, I'll be
sure to add them to the list.
For ease of development, there's a Makefile wrapper that can do everything you
need to do to work on Hilde. I recommend reading through it (it's not long),
but the important ones are `make` & `make run`, which are just Cargo aliases,
and `make db`, which starts a local PostgreSQL database using Docker.

2
Rocket.toml 100644
View File

@ -0,0 +1,2 @@
[debug.databases]
postgres_hilde = { url = "postgres://hilde:hilde@localhost/hilde" }

5
diesel.toml 100644
View File

@ -0,0 +1,5 @@
# For documentation on how to configure this file,
# see diesel.rs/guides/configuring-diesel-cli
[print_schema]
file = "src/schema.rs"

View File

View File

@ -0,0 +1,6 @@
-- This file was automatically created by Diesel to setup helper functions
-- and other internal bookkeeping. This file is safe to edit, any future
-- changes will be added to existing projects as new migrations.
DROP FUNCTION IF EXISTS diesel_manage_updated_at(_tbl regclass);
DROP FUNCTION IF EXISTS diesel_set_updated_at();

View File

@ -0,0 +1,36 @@
-- This file was automatically created by Diesel to setup helper functions
-- and other internal bookkeeping. This file is safe to edit, any future
-- changes will be added to existing projects as new migrations.
-- Sets up a trigger for the given table to automatically set a column called
-- `updated_at` whenever the row is modified (unless `updated_at` was included
-- in the modified columns)
--
-- # Example
--
-- ```sql
-- CREATE TABLE users (id SERIAL PRIMARY KEY, updated_at TIMESTAMP NOT NULL DEFAULT NOW());
--
-- SELECT diesel_manage_updated_at('users');
-- ```
CREATE OR REPLACE FUNCTION diesel_manage_updated_at(_tbl regclass) RETURNS VOID AS $$
BEGIN
EXECUTE format('CREATE TRIGGER set_updated_at BEFORE UPDATE ON %s
FOR EACH ROW EXECUTE PROCEDURE diesel_set_updated_at()', _tbl);
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION diesel_set_updated_at() RETURNS trigger AS $$
BEGIN
IF (
NEW IS DISTINCT FROM OLD AND
NEW.updated_at IS NOT DISTINCT FROM OLD.updated_at
) THEN
NEW.updated_at := current_timestamp;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

View File

@ -1,3 +1,34 @@
fn main() {
println!("Hello, world!");
#[macro_use]
extern crate rocket;
#[macro_use]
extern crate diesel_migrations;
use rocket::{fairing::AdHoc, Build, Rocket};
use rocket_sync_db_pools::{database, diesel};
embed_migrations!();
#[database("postgres_hilde")]
struct HildeDbConn(diesel::PgConnection);
async fn run_db_migrations(rocket: Rocket<Build>) -> Result<Rocket<Build>, Rocket<Build>> {
let conn = HildeDbConn::get_one(&rocket)
.await
.expect("database connection");
conn.run(|c| match embedded_migrations::run(c) {
Ok(()) => Ok(rocket),
Err(_) => Err(rocket),
})
.await
}
#[launch]
fn rocket() -> _ {
rocket::build()
.attach(HildeDbConn::fairing())
.attach(AdHoc::try_on_ignite(
"Run database migrations",
run_db_migrations,
))
}