diff --git a/.dockerignore b/.dockerignore index 2e8213b..1917669 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,4 +3,3 @@ !Cargo.toml !Cargo.lock !src/ -!migrations/ diff --git a/Cargo.lock b/Cargo.lock index 2b59b89..1cf7bc9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -178,16 +178,15 @@ dependencies = [ [[package]] name = "diesel" -version = "1.4.7" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bba51ca66f57261fd17cadf8b73e4775cc307d0521d855de3f5de91a8f074e0e" +checksum = "b28135ecf6b7d446b43e27e225622a038cc4e2930a1022f51cdb97ada19b8e4d" dependencies = [ "bitflags", "byteorder", "diesel_derives", "pq-sys", "r2d2", - "uuid", ] [[package]] @@ -252,21 +251,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "futures" version = "0.3.15" @@ -431,10 +415,8 @@ version = "0.1.0" dependencies = [ "diesel", "diesel_migrations", - "openssl", "rocket", "rocket_sync_db_pools", - "uuid", ] [[package]] @@ -671,33 +653,6 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" -[[package]] -name = "openssl" -version = "0.10.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "549430950c79ae24e6d02e0b7404534ecf311d94cc9f861e9e4020187d13d885" -dependencies = [ - "bitflags", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-sys", -] - -[[package]] -name = "openssl-sys" -version = "0.9.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a7907e3bfa08bb85105209cdfcb6c63d109f8f6c1ed6ca318fff5c1853fbc1d" -dependencies = [ - "autocfg", - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "parking_lot" version = "0.11.1" @@ -764,12 +719,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "pkg-config" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" - [[package]] name = "ppv-lite86" version = "0.2.10" @@ -944,7 +893,6 @@ dependencies = [ "rocket_codegen", "rocket_http", "serde", - "serde_json", "state", "tempfile", "time", @@ -1431,15 +1379,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" -dependencies = [ - "getrandom", -] - [[package]] name = "vcpkg" version = "0.2.15" diff --git a/Cargo.toml b/Cargo.toml index 20cfc2c..6375ee6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,37 +4,14 @@ version = "0.1.0" authors = ["Jef Roosens "] edition = "2018" -[lib] -name = "libhilde" -path = "src/libhilde/lib.rs" -test = true -bench = true -doc = true -doctest = true - -[[bin]] -name = "hilde" -path = "src/hilde/main.rs" -test = true -bench = true -doc = true -doctest = true +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -diesel = { version = "1.4.*", features = ["postgres", "uuidv07"] } -diesel_migrations = "1.4.*" -openssl = "*" - -[dependencies.rocket] -version = "0.5.0-rc.1" -features = ["json"] +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"] - -[dependencies.uuid] -version = "0.8.2" -default_features = false -features = [ "v4" ] diff --git a/Dockerfile b/Dockerfile index 798ee56..088caa0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,120 +1,22 @@ -ARG DI_VER="1.2.5" +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 rust:1.53 AS builder +FROM alpine:3.15 -# Here, we define the versions of the libraries we want to build -ARG DI_VER -ARG PQ_VER="11.12" -ARG ZLIB_VER="1.2.11" -ARG SSL_VER="1.0.2u" +COPY --from=builder /src/target/release/hilde /usr/local/bin/hilde -WORKDIR /usr/src - -ENV PREFIX="/usr/src/musl" \ - CC="musl-gcc -fPIC -pie -static" \ - LD_LIBRARY_PATH="$PREFIX" \ - PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" \ - PATH="/usr/local/bin:/root/.cargo/bin:$PATH" - -# Minimal build requirements for hilde's C dependencies -RUN apt update && \ - apt install -y --no-install-recommends \ - musl-dev \ - musl-tools \ - libpq-dev \ - libssl-dev && \ - rustup target add x86_64-unknown-linux-musl && \ - mkdir "$PREFIX" && \ - echo "$PREFIX/lib" >> /etc/ld-musl-x86_64.path - - -# =====BUILDING LIBRARIES===== -# Because I think it's cool, I wanted to make a fully static binary for hilde. That's why I'm -# manually compiling zlib, openssl & libpq using musl-gcc. This certainly wouldn't have been -# possible without this amazing Dockerfile, so I'm very glad I found it. -# https://github.com/clux/muslrust/blob/master/Dockerfile - -# Build zlib (as in, gzip) -RUN curl -sSL "https://zlib.net/zlib-$ZLIB_VER.tar.gz" | tar xz && \ - cd "zlib-$ZLIB_VER" && \ - LDFLAGS="-L$PREFIX/lib" CFLAGS="-I$PREFIX/include" ./configure \ - --static \ - --prefix "$PREFIX" && \ - make -j$(nproc) && \ - make install - -# Build openSSL (needed to build libpq, & send https requests using reqwest) -RUN curl -sSL "https://www.openssl.org/source/old/1.0.2/openssl-$SSL_VER.tar.gz" | tar xz && \ - cd "openssl-$SSL_VER" && \ - ./Configure \ - no-zlib \ - no-shared \ - -fPIC \ - --prefix="$PREFIX" \ - --openssldir="$PREFIX/ssl" \ - linux-x86_64 && \ - env C_INCLUDE_PATH="$PREFIX/include" make depend 2> /dev/null && \ - make -j$(nproc) && \ - make install - -# Build libpq -RUN curl -sSL "https://ftp.postgresql.org/pub/source/v$PQ_VER/postgresql-$PQ_VER.tar.gz" | tar xz && \ - cd "postgresql-$PQ_VER" && \ - LDFLAGS="-L$PREFIX/lib" CFLAGS="-I$PREFIX/include" ./configure \ - --without-readline \ - --with-openssl \ - --prefix="$PREFIX" \ - --host=x86_64-unknown-linux-musl && \ - cd src/interfaces/libpq && \ - make -s -j$(nproc) all-static-lib && \ - make -s install install-lib-static && \ - cd ../../bin/pg_config && \ - make -j $(nproc) && \ - make install - -# As far as I know these env vars just config the libraries in the correct way -# to properly compile them later -ENV PATH=$PREFIX/bin:$PATH \ - PKG_CONFIG_ALLOW_CROSS=true \ - PKG_CONFIG_ALL_STATIC=true \ - PQ_LIB_STATIC_X86_64_UNKNOWN_LINUX_MUSL=true \ - PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig \ - PG_CONFIG_X86_64_UNKNOWN_LINUX_GNU=/usr/bin/pg_config \ - OPENSSL_STATIC=true \ - OPENSSL_DIR=$PREFIX \ - SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt \ - SSL_CERT_DIR=/etc/ssl/certs \ - LIBZ_SYS_STATIC=1 - - -# =====BUILD DUMB-INIT===== -# dumb-init is a very basic init system designed to act as the PID 1 process inside a Docker container. -# The Makefile already specifies static build flags, so we don't have to specify them here. -RUN curl -sSL "https://github.com/Yelp/dumb-init/archive/refs/tags/v$DI_VER.tar.gz" | \ - tar xzf - && \ - cd "dumb-init-$DI_VER" && \ - CC="musl-gcc" make build - - -# =====BUILD HILDE===== -# Now that we've compiled all our C dependencies, we can build the actual binary using Cargo. - -COPY . ./hilde/ -RUN cd hilde && \ - cargo build \ - --release \ - --target x86_64-unknown-linux-musl - - -# =====CREATE RELEASE IMAGE===== -# Thanks to all the compiling done above, we can now create a working Docker image using just static binaries. -# This way, we don't need a base OS, which drastically reduces the final image size. -FROM scratch -ARG DI_VER - -COPY --from=builder /usr/src/dumb-init-$DI_VER/dumb-init /bin/dumb-init -COPY --from=builder /usr/src/hilde/target/x86_64-unknown-linux-musl/release/hilde /bin/hilde - -ENTRYPOINT [ "/bin/dumb-init", "--" ] -CMD [ "/bin/hilde" ] +ENTRYPOINT [ "/usr/local/bin/hilde" ] diff --git a/diesel.toml b/diesel.toml index 013842c..92267c8 100644 --- a/diesel.toml +++ b/diesel.toml @@ -2,4 +2,4 @@ # see diesel.rs/guides/configuring-diesel-cli [print_schema] -file = "src/libhilde/schema.rs" +file = "src/schema.rs" diff --git a/src/hilde/routes/mod.rs b/src/hilde/routes/mod.rs deleted file mode 100644 index 81e592b..0000000 --- a/src/hilde/routes/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod pkgs; diff --git a/src/hilde/routes/pkgs/mod.rs b/src/hilde/routes/pkgs/mod.rs deleted file mode 100644 index fbda3b0..0000000 --- a/src/hilde/routes/pkgs/mod.rs +++ /dev/null @@ -1,27 +0,0 @@ -use rocket::{ - Route, - fs::TempFile, - serde::json::Json -}; - -pub fn routes() -> Vec { - routes![get_package_info, upload_package_version] -} - -// #[get("/")] -// async fn get_package_versions(pkg: String) -> Json> { -// Json(vec![]) -// } - -/// Returns the stored metadata for the given package version. -#[get("//")] -fn get_package_info(pkg: String, version: String) { - -} - -/// Upload a package version to the server. -#[put("//", data="")] -async fn upload_package_version(mut file: TempFile<'_>, pkg: String, version: String) { - -} - diff --git a/src/libhilde/lib.rs b/src/libhilde/lib.rs deleted file mode 100644 index 32e2893..0000000 --- a/src/libhilde/lib.rs +++ /dev/null @@ -1,5 +0,0 @@ -// Not sure if this is needed here -// extern crate openssl; -#[macro_use] extern crate diesel; - -pub mod schema; diff --git a/src/libhilde/pkgs/deb.rs b/src/libhilde/pkgs/deb.rs deleted file mode 100644 index 6ff5e74..0000000 --- a/src/libhilde/pkgs/deb.rs +++ /dev/null @@ -1,3 +0,0 @@ -use std::fs::PathBuf; - -pub fn extract_control(path: PathBuf) -> diff --git a/src/libhilde/pkgs/mod.rs b/src/libhilde/pkgs/mod.rs deleted file mode 100644 index e69de29..0000000 diff --git a/src/libhilde/schema.rs b/src/libhilde/schema.rs deleted file mode 100644 index e69de29..0000000 diff --git a/src/hilde/main.rs b/src/main.rs similarity index 74% rename from src/hilde/main.rs rename to src/main.rs index 27f2b7e..5db0513 100644 --- a/src/hilde/main.rs +++ b/src/main.rs @@ -1,22 +1,16 @@ -// This needs to be explicitely included before diesel is imported to make sure -// compilation succeeds -extern crate openssl; - #[macro_use] extern crate rocket; #[macro_use] extern crate diesel_migrations; -mod routes; - use rocket::{fairing::AdHoc, Build, Rocket}; use rocket_sync_db_pools::{database, diesel}; embed_migrations!(); #[database("postgres_hilde")] -pub struct HildeDbConn(diesel::PgConnection); +struct HildeDbConn(diesel::PgConnection); async fn run_db_migrations(rocket: Rocket) -> Result, Rocket> { let conn = HildeDbConn::get_one(&rocket) @@ -37,6 +31,4 @@ fn rocket() -> _ { "Run database migrations", run_db_migrations, )) - .mount("/pkgs", routes::pkgs::routes()) - // .attach(routes::all()) }