Compare commits

...
This repository has been archived on 2021-12-24. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.

23 commits

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

5
.dockerignore Normal file
View file

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

13
.editorconfig Normal file
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 Normal file
View file

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

77
.woodpecker.yml Normal file
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 Normal file
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 Normal file
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 Normal file
View file

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

5
diesel.toml Normal file
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"

0
migrations/.gitkeep Normal file
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,
))
}