diff --git a/.dockerignore b/.dockerignore index 8ca2e3f8..453634df 100644 --- a/.dockerignore +++ b/.dockerignore @@ -11,7 +11,7 @@ docker/ *.iml # Git folder -# .git +.git .gitea .gitlab .github diff --git a/.forgejo/workflows/build-alpine.yml b/.forgejo/workflows/build-alpine.yml new file mode 100644 index 00000000..b1757a60 --- /dev/null +++ b/.forgejo/workflows/build-alpine.yml @@ -0,0 +1,49 @@ +on: + - workflow-dispatch + - push + +jobs: + build: + runs-on: ubuntu-latest + container: + image: alpine:edge + + steps: + - name: set up dependencies + run: | + apk update + apk upgrade + apk add nodejs git alpine-sdk + - uses: actions/checkout@v4 + name: checkout the alpine dir + with: + sparse-checkout: "alpine/" + + # - uses: actions/checkout@v4 + # name: checkout the rest in the alpine dir + # with: + # path: 'alpine/continuwuity' + - name: set up user + run: adduser -DG abuild ci + + - name: set up keys + run: | + pwd + mkdir ~/.abuild + echo "${{ secrets.abuild_privkey }}" > ~/.abuild/ci@continuwuity.rsa + echo "${{ secrets.abuild_pubkey }}" > ~/.abuild/ci@continuwuity.rsa.pub + echo $HOME + echo 'PACKAGER_PRIVKEY="/root/.abuild/ci@continuwuity.rsa"' > ~/.abuild/abuild.conf + ls ~/.abuild + + - name: go go gadget abuild + run: | + cd alpine + # modify the APKBUILD to use the current branch instead of the release + # note that it seems to require the repo to be public (as you'll get + # a 404 even if the token is provided) + export ARCHIVE_URL="${{ github.server_url }}/${{ github.repository }}/archive/${{ github.ref_name }}.tar.gz" + echo $ARCHIVE_URL + sed -i '/^source=/c\source="'"$ARCHIVE_URL" APKBUILD + abuild -F checksum + abuild -Fr diff --git a/.forgejo/workflows/release-image.yml b/.forgejo/workflows/release-image.yml index 704a3bbf..141bfef9 100644 --- a/.forgejo/workflows/release-image.yml +++ b/.forgejo/workflows/release-image.yml @@ -80,29 +80,17 @@ jobs: run: echo '${{ toJSON(fromJSON(needs.define-variables.outputs.build_matrix)) }}' - name: Echo matrix run: echo '${{ toJSON(matrix) }}' + - name: Checkout repository + uses: actions/checkout@v4 + with: + persist-credentials: false - run: | if ! command -v rustup &> /dev/null ; then curl --proto '=https' --tlsv1.2 --retry 10 --retry-connrefused -fsSL "https://sh.rustup.rs" | sh -s -- --default-toolchain none -y echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> $GITHUB_PATH fi - - - name: Checkout repository - uses: actions/checkout@v4 - with: - persist-credentials: false - - - name: Cache timelord-cli installation - id: cache-timelord-bin - uses: actions/cache@v3 - with: - path: ~/.cargo/bin/timelord - key: timelord-cli-v3.0.1 - - name: Install timelord-cli - uses: https://github.com/cargo-bins/cargo-binstall@main - if: steps.cache-timelord-bin.outputs.cache-hit != 'true' + - uses: https://github.com/cargo-bins/cargo-binstall@main - run: cargo binstall timelord-cli@3.0.1 - if: steps.cache-timelord-bin.outputs.cache-hit != 'true' - - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Set up QEMU @@ -155,10 +143,7 @@ jobs: context: . file: "docker/Dockerfile" build-args: | - GIT_COMMIT_HASH=${{ github.sha }}) - GIT_COMMIT_HASH_SHORT=${{ env.COMMIT_SHORT_SHA }}) - GIT_REMOTE_URL=${{github.event.repository.html_url }} - GIT_REMOTE_COMMIT_URL=${{github.event.head_commit.url }} + CONDUWUIT_VERSION_EXTRA=${{ env.COMMIT_SHORT_SHA }} platforms: ${{ matrix.platform }} labels: ${{ steps.meta.outputs.labels }} annotations: ${{ steps.meta.outputs.annotations }} @@ -214,7 +199,7 @@ jobs: type=semver,pattern=v{{version}} type=semver,pattern=v{{major}}.{{minor}},enable=${{ !startsWith(github.ref, 'refs/tags/v0.0.') }} type=semver,pattern=v{{major}},enable=${{ !startsWith(github.ref, 'refs/tags/v0.') }} - type=ref,event=branch,prefix=${{ format('refs/heads/{0}', github.event.repository.default_branch) != github.ref && 'branch-' || '' }} + type=ref,event=branch,prefix=${{ format('refs/heads/{0}', github.event.repository.default_branch) 1= github.ref && 'branch-' || '' }} type=ref,event=pr type=sha,format=long images: ${{needs.define-variables.outputs.images}} diff --git a/Cargo.lock b/Cargo.lock index 18375234..2d8a2d0f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -109,48 +109,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dbc3a507a82b17ba0d98f6ce8fd6954ea0c8152e98009d36a40d8dcc8ce078a" -[[package]] -name = "askama" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f75363874b771be265f4ffe307ca705ef6f3baa19011c149da8674a87f1b75c4" -dependencies = [ - "askama_derive", - "itoa", - "percent-encoding", - "serde", - "serde_json", -] - -[[package]] -name = "askama_derive" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "129397200fe83088e8a68407a8e2b1f826cf0086b21ccdb866a722c8bcd3a94f" -dependencies = [ - "askama_parser", - "basic-toml", - "memchr", - "proc-macro2", - "quote", - "rustc-hash 2.1.1", - "serde", - "serde_derive", - "syn", -] - -[[package]] -name = "askama_parser" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6ab5630b3d5eaf232620167977f95eb51f3432fc76852328774afbd242d4358" -dependencies = [ - "memchr", - "serde", - "serde_derive", - "winnow", -] - [[package]] name = "assign" version = "1.1.1" @@ -457,15 +415,6 @@ version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" -[[package]] -name = "basic-toml" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" -dependencies = [ - "serde", -] - [[package]] name = "bindgen" version = "0.69.5" @@ -584,9 +533,6 @@ name = "built" version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" -dependencies = [ - "cargo-lock", -] [[package]] name = "bumpalo" @@ -634,19 +580,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "cargo-lock" -version = "10.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06acb4f71407ba205a07cb453211e0e6a67b21904e47f6ba1f9589e38f2e454" -dependencies = [ - "petgraph", - "semver", - "serde", - "toml", - "url", -] - [[package]] name = "cargo_toml" version = "0.21.0" @@ -872,13 +805,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "conduwuit_build_metadata" -version = "0.5.0-rc.5" -dependencies = [ - "built", -] - [[package]] name = "conduwuit_core" version = "0.5.0-rc.5" @@ -893,7 +819,6 @@ dependencies = [ "checked_ops", "chrono", "clap", - "conduwuit_build_metadata", "conduwuit_macros", "const-str", "core_affinity", @@ -979,7 +904,6 @@ dependencies = [ "conduwuit_api", "conduwuit_core", "conduwuit_service", - "conduwuit_web", "const-str", "futures", "http", @@ -1037,20 +961,6 @@ dependencies = [ "webpage", ] -[[package]] -name = "conduwuit_web" -version = "0.5.0-rc.5" -dependencies = [ - "askama", - "axum", - "conduwuit_build_metadata", - "conduwuit_service", - "futures", - "rand 0.8.5", - "thiserror 2.0.12", - "tracing", -] - [[package]] name = "console-api" version = "0.8.1" @@ -1541,12 +1451,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - [[package]] name = "flate2" version = "1.1.1" @@ -3164,16 +3068,6 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset", - "indexmap 2.8.0", -] - [[package]] name = "phf" version = "0.11.3" @@ -4169,9 +4063,6 @@ name = "semver" version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" -dependencies = [ - "serde", -] [[package]] name = "sentry" diff --git a/Cargo.toml b/Cargo.toml index 43cd3f4f..1ce5c1db 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -626,17 +626,6 @@ package = "conduwuit_macros" path = "src/macros" default-features = false -[workspace.dependencies.conduwuit-web] -package = "conduwuit_web" -path = "src/web" -default-features = false - - -[workspace.dependencies.conduwuit-build-metadata] -package = "conduwuit_build_metadata" -path = "src/build_metadata" -default-features = false - ############################################################################### # # Release profiles diff --git a/alpine/APKBUILD b/alpine/APKBUILD new file mode 100644 index 00000000..97f84f65 --- /dev/null +++ b/alpine/APKBUILD @@ -0,0 +1,63 @@ +# Contributor: magmaus3 <maia@magmaus3.eu.org> +# Maintainer: magmaus3 <maia@magmaus3.eu.org> +pkgname=continuwuity + +# abuild doesn't like the format of v0.5.0-rc.5, so i had to change it +# see https://wiki.alpinelinux.org/wiki/Package_policies +pkgver=0.5.0_rc5 +pkgrel=0 +pkgdesc="a continuwuation of a very cool, featureful fork of conduit" +url="https://continuwuity.org/" +arch="all" +license="Apache-2.0" +depends="liburing" + +# cargo version on alpine v3.21 is too old to use the 2024 edition +# i recommend either building everything on edge, or adding +# the edge repo as a tag +makedepends="cargo liburing-dev clang-dev linux-headers" +checkdepends="" +install="$pkgname.pre-install" +subpackages="$pkgname-openrc" +source="https://forgejo.ellis.link/continuwuation/continuwuity/archive/v0.5.0-rc.5.tar.gz +continuwuity.initd +continuwuity.confd +" +builddir="$srcdir/continuwuity" +options="net !check" + +prepare() { + default_prepare + cd $srcdir/continuwuity + + # add the default database path to the config (commented out) + cat conduwuit-example.toml \ + | sed '/#database_path/ s:$: "/var/lib/continuwuity":' \ + > "$srcdir"/continuwuity.toml + + cargo fetch --target="$CTARGET" --locked +} + +build() { + cargo build --frozen --release --all-features +} + +check() { + # TODO: make sure the tests work + #cargo test --frozen + return +} + +package() { + cd $srcdir + install -Dm755 continuwuity/target/release/conduwuit "$pkgdir"/usr/bin/continuwuity + install -Dm644 "$srcdir"/continuwuity.toml -t "$pkgdir"/etc/continuwuity + install -Dm755 "$srcdir"/continuwuity.initd "$pkgdir"/etc/init.d/continuwuity + install -Dm644 "$srcdir"/continuwuity.confd "$pkgdir"/etc/conf.d/continuwuity +} + +sha512sums=" +66f6da5e98b6f7bb8c1082500101d5c87b1b79955c139b44c6ef5123919fb05feb0dffc669a3af1bc8d571ddb9f3576660f08dc10a6b19eab6db9e391175436a v0.5.0-rc.5.tar.gz +0482674be24740496d70da256d4121c5a5e3b749f2445d2bbe0e8991f1449de052724f8427da21a6f55574bc53eac9ca1e47e5012b4c13049b2b39044734d80d continuwuity.initd +38e2576278b450d16ba804dd8f4a128f18cd793e6c3ce55aedee1e186905755b31ee23baaa6586b1ab0e25a1f29bf1ea86bfaae4185b0cb1a29203726a199426 continuwuity.confd +" diff --git a/alpine/README.md b/alpine/README.md new file mode 100644 index 00000000..5f26d772 --- /dev/null +++ b/alpine/README.md @@ -0,0 +1,7 @@ +# building + +1. [set up your build + environment](https://wiki.alpinelinux.org/wiki/Include:Setup_your_system_and_account_for_building_packages) + +2. run `abuild` (or `abuild -K` if you want to keep the source directory to make + rebuilding faster) diff --git a/alpine/continuwuity.confd b/alpine/continuwuity.confd new file mode 100644 index 00000000..03d7b0a0 --- /dev/null +++ b/alpine/continuwuity.confd @@ -0,0 +1,3 @@ +supervisor=supervise-daemon +export CONTINUWUITY_CONFIG=/etc/continuwuity/continuwuity.toml + diff --git a/alpine/continuwuity.initd b/alpine/continuwuity.initd new file mode 100644 index 00000000..1354f4bd --- /dev/null +++ b/alpine/continuwuity.initd @@ -0,0 +1,19 @@ +#!/sbin/openrc-run + +command="/usr/bin/continuwuity" +command_user="continuwuity:continuwuity" +command_args="--config ${CONTINUWUITY_CONFIG=/etc/continuwuity/continuwuity.toml}" +command_background=true +pidfile="/run/$RC_SVCNAME.pid" + +output_log="/var/log/continuwuity.log" +error_log="/var/log/continuwuity.log" + +depend() { + need net +} + +start_pre() { + checkpath -d -m 0755 -o "$command_user" /var/lib/continuwuity + checkpath -f -m 0644 -o "$command_user" "$output_log" +} diff --git a/alpine/continuwuity.pre-install b/alpine/continuwuity.pre-install new file mode 100644 index 00000000..edac789f --- /dev/null +++ b/alpine/continuwuity.pre-install @@ -0,0 +1,4 @@ +#!/bin/sh +addgroup -S continuwuity 2>/dev/null +adduser -S -D -H -h /var/lib/continuwuity -s /sbin/nologin -G continuwuity -g continuwuity continuwuity 2>/dev/null +exit 0 diff --git a/docker/Dockerfile b/docker/Dockerfile index 3029282f..536af632 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -111,9 +111,15 @@ RUN mkdir /out FROM toolchain AS builder - -# Get source -COPY . . +# Conduwuit version info +ARG COMMIT_SHA= +ARG CONDUWUIT_VERSION_EXTRA= +ENV CONDUWUIT_VERSION_EXTRA=$CONDUWUIT_VERSION_EXTRA +RUN <<EOF +if [ -z "${CONDUWUIT_VERSION_EXTRA}" ]; then + echo "CONDUWUIT_VERSION_EXTRA='$(set -e; git rev-parse --short ${COMMIT_SHA:-HEAD} || echo unknown revision)'" >> /etc/environment +fi +EOF ARG TARGETPLATFORM @@ -121,20 +127,8 @@ ARG TARGETPLATFORM RUN cat /etc/environment RUN xx-cargo --print-target-triple -# Conduwuit version info -ARG GIT_COMMIT_HASH= -ARG GIT_COMMIT_HASH_SHORT= -ARG GIT_REMOTE_URL= -ARG GIT_REMOTE_COMMIT_URL= -ARG CONDUWUIT_VERSION_EXTRA= -ARG CONTINUWUITY_VERSION_EXTRA= -ENV GIT_COMMIT_HASH=$GIT_COMMIT_HASH -ENV GIT_COMMIT_HASH_SHORT=$GIT_COMMIT_HASH_SHORT -ENV GIT_REMOTE_URL=$GIT_REMOTE_URL -ENV GIT_REMOTE_COMMIT_URL=$GIT_REMOTE_COMMIT_URL -ENV CONDUWUIT_VERSION_EXTRA=$CONDUWUIT_VERSION_EXTRA -ENV CONTINUWUITY_VERSION_EXTRA=$CONTINUWUITY_VERSION_EXTRA - +# Get source +COPY . . # Build the binary RUN --mount=type=cache,target=/usr/local/cargo/registry \ diff --git a/nix/pkgs/main/default.nix b/nix/pkgs/main/default.nix index f2fffec0..9c8038a7 100644 --- a/nix/pkgs/main/default.nix +++ b/nix/pkgs/main/default.nix @@ -130,8 +130,7 @@ buildDepsOnlyEnv = }); buildPackageEnv = { - GIT_COMMIT_HASH = inputs.self.rev or inputs.self.dirtyRev or ""; - GIT_COMMIT_HASH_SHORT = inputs.self.shortRev or inputs.self.dirtyShortRev or ""; + CONDUWUIT_VERSION_EXTRA = inputs.self.shortRev or inputs.self.dirtyShortRev or ""; } // buildDepsOnlyEnv // { # Only needed in static stdenv because these are transitive dependencies of rocksdb CARGO_BUILD_RUSTFLAGS = buildDepsOnlyEnv.CARGO_BUILD_RUSTFLAGS diff --git a/src/api/client/message.rs b/src/api/client/message.rs index e442850b..16b1796a 100644 --- a/src/api/client/message.rs +++ b/src/api/client/message.rs @@ -143,10 +143,7 @@ pub(crate) async fn get_message_events_route( if let Some(registration) = body.appservice_info.as_ref() { <&DeviceId>::from(registration.registration.id.as_str()) } else { - panic!( - "No device_id provided and no appservice registration found, this \ - should be unreachable" - ); + panic!("No device_id provided and no appservice registration found, this should be unreachable"); }, }, room_id, diff --git a/src/api/router.rs b/src/api/router.rs index 5416e9e9..3fbef275 100644 --- a/src/api/router.rs +++ b/src/api/router.rs @@ -3,6 +3,7 @@ mod auth; mod handler; mod request; mod response; +pub mod state; use std::str::FromStr; @@ -12,11 +13,10 @@ use axum::{ routing::{any, get, post}, }; use conduwuit::{Server, err}; -pub(super) use conduwuit_service::state::State; use http::{Uri, uri}; use self::handler::RouterExt; -pub(super) use self::{args::Args as Ruma, response::RumaResponse}; +pub(super) use self::{args::Args as Ruma, response::RumaResponse, state::State}; use crate::{client, server}; pub fn build(router: Router<State>, server: &Server) -> Router<State> { diff --git a/src/service/state.rs b/src/api/router/state.rs similarity index 98% rename from src/service/state.rs rename to src/api/router/state.rs index c0884a5c..57eb94ca 100644 --- a/src/service/state.rs +++ b/src/api/router/state.rs @@ -1,6 +1,6 @@ use std::{ops::Deref, sync::Arc}; -use crate::Services; +use conduwuit_service::Services; #[derive(Clone, Copy)] pub struct State { diff --git a/src/build_metadata/Cargo.toml b/src/build_metadata/Cargo.toml deleted file mode 100644 index 3a98c6bf..00000000 --- a/src/build_metadata/Cargo.toml +++ /dev/null @@ -1,34 +0,0 @@ -[package] -name = "conduwuit_build_metadata" -categories.workspace = true -description.workspace = true -edition.workspace = true -keywords.workspace = true -license.workspace = true -readme.workspace = true -repository.workspace = true -version.workspace = true - - -build = "build.rs" -# [[bin]] -# path = "main.rs" -# name = "conduwuit_build_metadata" - -[lib] -path = "mod.rs" -crate-type = [ - "rlib", -# "dylib", -] - -[features] - - -[dependencies] - -[build-dependencies] -built = {version = "0.7", features = ["cargo-lock", "dependency-tree"]} - -[lints] -workspace = true diff --git a/src/build_metadata/build.rs b/src/build_metadata/build.rs deleted file mode 100644 index 2fec16a7..00000000 --- a/src/build_metadata/build.rs +++ /dev/null @@ -1,92 +0,0 @@ -use std::process::Command; - -fn run_git_command(args: &[&str]) -> Option<String> { - Command::new("git") - .args(args) - .output() - .ok() - .filter(|output| output.status.success()) - .and_then(|output| String::from_utf8(output.stdout).ok()) - .map(|s| s.trim().to_owned()) - .filter(|s| !s.is_empty()) -} -fn get_env(env_var: &str) -> Option<String> { - match std::env::var(env_var) { - | Ok(val) if !val.is_empty() => Some(val), - | _ => None, - } -} -fn main() { - // built gets the default crate from the workspace. Not sure if this is intended - // behavior, but it's what we want. - built::write_built_file().expect("Failed to acquire build-time information"); - - // --- Git Information --- - let mut commit_hash = None; - let mut commit_hash_short = None; - let mut remote_url_web = None; - - // Get full commit hash - if let Some(hash) = - get_env("GIT_COMMIT_HASH").or_else(|| run_git_command(&["rev-parse", "HEAD"])) - { - println!("cargo:rustc-env=GIT_COMMIT_HASH={hash}"); - commit_hash = Some(hash); - } - - // Get short commit hash - if let Some(short_hash) = get_env("GIT_COMMIT_HASH_SHORT") - .or_else(|| run_git_command(&["rev-parse", "--short", "HEAD"])) - { - println!("cargo:rustc-env=GIT_COMMIT_HASH_SHORT={short_hash}"); - commit_hash_short = Some(short_hash); - } - - // Get remote URL and convert to web URL - if let Some(remote_url_raw) = get_env("GIT_REMOTE_URL") - .or_else(|| run_git_command(&["config", "--get", "remote.origin.url"])) - { - println!("cargo:rustc-env=GIT_REMOTE_URL={remote_url_raw}"); - let web_url = if remote_url_raw.starts_with("https://") { - remote_url_raw.trim_end_matches(".git").to_owned() - } else if remote_url_raw.starts_with("git@") { - remote_url_raw - .trim_end_matches(".git") - .replacen(':', "/", 1) - .replacen("git@", "https://", 1) - } else if remote_url_raw.starts_with("ssh://") { - remote_url_raw - .trim_end_matches(".git") - .replacen("git@", "", 1) - .replacen("ssh:", "https:", 1) - } else { - // Assume it's already a web URL or unknown format - remote_url_raw - }; - println!("cargo:rustc-env=GIT_REMOTE_WEB_URL={web_url}"); - remote_url_web = Some(web_url); - } - - // Construct remote commit URL - if let Some(remote_commit_url) = get_env("GIT_REMOTE_COMMIT_URL") { - println!("cargo:rustc-env=GIT_REMOTE_COMMIT_URL={remote_commit_url}"); - } else if let (Some(base_url), Some(hash)) = - (&remote_url_web, commit_hash.as_ref().or(commit_hash_short.as_ref())) - { - let commit_page = format!("{base_url}/commit/{hash}"); - println!("cargo:rustc-env=GIT_REMOTE_COMMIT_URL={commit_page}"); - } - - // --- Rerun Triggers --- - // Rerun if the git HEAD changes - println!("cargo:rerun-if-changed=.git/HEAD"); - // Rerun if the ref pointed to by HEAD changes (e.g., new commit on branch) - if let Some(ref_path) = run_git_command(&["symbolic-ref", "--quiet", "HEAD"]) { - println!("cargo:rerun-if-changed=.git/{ref_path}"); - } - - println!("cargo:rerun-if-env-changed=GIT_COMMIT_HASH"); - println!("cargo:rerun-if-env-changed=GIT_COMMIT_HASH_SHORT"); - println!("cargo:rerun-if-env-changed=GIT_REMOTE_URL"); - println!("cargo:rerun-if-env-changed=GIT_REMOTE_COMMIT_URL"); -} diff --git a/src/build_metadata/mod.rs b/src/build_metadata/mod.rs deleted file mode 100644 index cf3364c1..00000000 --- a/src/build_metadata/mod.rs +++ /dev/null @@ -1,23 +0,0 @@ -pub mod built { - include!(concat!(env!("OUT_DIR"), "/built.rs")); -} - -pub static GIT_COMMIT_HASH: Option<&str> = option_env!("GIT_COMMIT_HASH"); - -pub static GIT_COMMIT_HASH_SHORT: Option<&str> = option_env!("GIT_COMMIT_HASH_SHORT"); - -// this would be a lot better if Option::or was const. -pub static VERSION_EXTRA: Option<&str> = - if let v @ Some(_) = option_env!("CONTINUWUITY_VERSION_EXTRA") { - v - } else if let v @ Some(_) = option_env!("CONDUWUIT_VERSION_EXTRA") { - v - } else if let v @ Some(_) = option_env!("CONDUIT_VERSION_EXTRA") { - v - } else { - GIT_COMMIT_HASH_SHORT - }; -pub static GIT_REMOTE_WEB_URL: Option<&str> = option_env!("GIT_REMOTE_WEB_URL"); -pub static GIT_REMOTE_COMMIT_URL: Option<&str> = option_env!("GIT_REMOTE_COMMIT_URL"); - -// TODO: Mark dirty builds within the version string diff --git a/src/core/Cargo.toml b/src/core/Cargo.toml index 0c33c590..f42b049b 100644 --- a/src/core/Cargo.toml +++ b/src/core/Cargo.toml @@ -67,7 +67,6 @@ checked_ops.workspace = true chrono.workspace = true clap.workspace = true conduwuit-macros.workspace = true -conduwuit-build-metadata.workspace = true const-str.workspace = true core_affinity.workspace = true ctor.workspace = true diff --git a/src/core/info/version.rs b/src/core/info/version.rs index 523c40a2..6abb6e13 100644 --- a/src/core/info/version.rs +++ b/src/core/info/version.rs @@ -26,6 +26,13 @@ pub fn user_agent() -> &'static str { USER_AGENT.get_or_init(init_user_agent) } fn init_user_agent() -> String { format!("{}/{}", name(), version()) } fn init_version() -> String { - conduwuit_build_metadata::VERSION_EXTRA - .map_or(SEMANTIC.to_owned(), |extra| format!("{SEMANTIC} ({extra})")) + option_env!("CONDUWUIT_VERSION_EXTRA") + .or(option_env!("CONDUIT_VERSION_EXTRA")) + .map_or(SEMANTIC.to_owned(), |extra| { + if extra.is_empty() { + SEMANTIC.to_owned() + } else { + format!("{SEMANTIC} ({extra})") + } + }) } diff --git a/src/router/Cargo.toml b/src/router/Cargo.toml index 9fcb8d6a..e4ddcb9b 100644 --- a/src/router/Cargo.toml +++ b/src/router/Cargo.toml @@ -103,7 +103,6 @@ conduwuit-admin.workspace = true conduwuit-api.workspace = true conduwuit-core.workspace = true conduwuit-service.workspace = true -conduwuit-web.workspace = true const-str.workspace = true futures.workspace = true http.workspace = true diff --git a/src/router/layers.rs b/src/router/layers.rs index 70f3a660..6920555d 100644 --- a/src/router/layers.rs +++ b/src/router/layers.rs @@ -6,7 +6,8 @@ use axum::{ }; use axum_client_ip::SecureClientIpSource; use conduwuit::{Result, Server, debug, error}; -use conduwuit_service::{Services, state::Guard}; +use conduwuit_api::router::state::Guard; +use conduwuit_service::Services; use http::{ HeaderValue, Method, StatusCode, header::{self, HeaderName}, diff --git a/src/router/router.rs b/src/router/router.rs index fdaf9126..0f95b924 100644 --- a/src/router/router.rs +++ b/src/router/router.rs @@ -1,8 +1,9 @@ use std::sync::Arc; -use axum::{Router, response::IntoResponse}; +use axum::{Router, response::IntoResponse, routing::get}; use conduwuit::Error; -use conduwuit_service::{Services, state, state::Guard}; +use conduwuit_api::router::{state, state::Guard}; +use conduwuit_service::Services; use http::{StatusCode, Uri}; use ruma::api::client::error::ErrorKind; @@ -10,7 +11,7 @@ pub(crate) fn build(services: &Arc<Services>) -> (Router, Guard) { let router = Router::<state::State>::new(); let (state, guard) = state::create(services.clone()); let router = conduwuit_api::router::build(router, &services.server) - .merge(conduwuit_web::build()) + .route("/", get(it_works)) .fallback(not_found) .with_state(state); @@ -20,3 +21,5 @@ pub(crate) fn build(services: &Arc<Services>) -> (Router, Guard) { async fn not_found(_uri: Uri) -> impl IntoResponse { Error::Request(ErrorKind::Unrecognized, "Not Found".into(), StatusCode::NOT_FOUND) } + +async fn it_works() -> &'static str { "hewwo from conduwuit woof!" } diff --git a/src/service/mod.rs b/src/service/mod.rs index 3d7a3aa9..eb15e5ec 100644 --- a/src/service/mod.rs +++ b/src/service/mod.rs @@ -5,7 +5,6 @@ mod manager; mod migrations; mod service; pub mod services; -pub mod state; pub mod account_data; pub mod admin; diff --git a/src/web/Cargo.toml b/src/web/Cargo.toml deleted file mode 100644 index 5c2dbebb..00000000 --- a/src/web/Cargo.toml +++ /dev/null @@ -1,35 +0,0 @@ -[package] -name = "conduwuit_web" -categories.workspace = true -description.workspace = true -edition.workspace = true -keywords.workspace = true -license.workspace = true -readme.workspace = true -repository.workspace = true -version.workspace = true - -[lib] -path = "mod.rs" -crate-type = [ - "rlib", -# "dylib", -] - -[features] - - -[dependencies] -conduwuit-build-metadata.workspace = true -conduwuit-service.workspace = true - -askama = "0.14.0" - -axum.workspace = true -futures.workspace = true -tracing.workspace = true -rand.workspace = true -thiserror.workspace = true - -[lints] -workspace = true diff --git a/src/web/css/index.css b/src/web/css/index.css deleted file mode 100644 index 86cb6d8d..00000000 --- a/src/web/css/index.css +++ /dev/null @@ -1,68 +0,0 @@ -:root { - color-scheme: light; - --font-stack: sans-serif; - - --background-color: #fff; - --text-color: #000; - - --bg: oklch(0.76 0.0854 317.27); - --panel-bg: oklch(0.91 0.042 317.27); - - --name-lightness: 0.45; - - @media (prefers-color-scheme: dark) { - color-scheme: dark; - --text-color: #fff; - --bg: oklch(0.15 0.042 317.27); - --panel-bg: oklch(0.24 0.03 317.27); - - --name-lightness: 0.8; - } - - --c1: oklch(0.44 0.177 353.06); - --c2: oklch(0.59 0.158 150.88); - - --normal-font-size: 1rem; - --small-font-size: 0.8rem; -} - -body { - color: var(--text-color); - font-family: var(--font-stack); - margin: 0; - padding: 0; - display: grid; - place-items: center; - min-height: 100vh; -} - -html { - background-color: var(--bg); - background-image: linear-gradient( - 70deg, - oklch(from var(--bg) l + 0.2 c h), - oklch(from var(--bg) l - 0.2 c h) - ); - font-size: 16px; -} - -.panel { - width: min(clamp(24rem, 12rem + 40vw, 48rem), 100vw); - border-radius: 15px; - background-color: var(--panel-bg); - padding-inline: 1.5rem; - padding-block: 1rem; - box-shadow: 0 0.25em 0.375em hsla(0, 0%, 0%, 0.1); -} - -.project-name { - text-decoration: none; - background: linear-gradient( - 130deg, - oklch(from var(--c1) var(--name-lightness) c h), - oklch(from var(--c2) var(--name-lightness) c h) - ); - background-clip: text; - color: transparent; - filter: brightness(1.2); -} diff --git a/src/web/mod.rs b/src/web/mod.rs deleted file mode 100644 index 25ec868c..00000000 --- a/src/web/mod.rs +++ /dev/null @@ -1,73 +0,0 @@ -use askama::Template; -use axum::{ - Router, - extract::State, - http::{StatusCode, header}, - response::{Html, IntoResponse, Response}, - routing::get, -}; -use conduwuit_build_metadata::{GIT_REMOTE_COMMIT_URL, GIT_REMOTE_WEB_URL, VERSION_EXTRA}; -use conduwuit_service::state; - -pub fn build() -> Router<state::State> { - let router = Router::<state::State>::new(); - router.route("/", get(index_handler)) -} - -async fn index_handler( - State(services): State<state::State>, -) -> Result<impl IntoResponse, WebError> { - #[derive(Debug, Template)] - #[template(path = "index.html.j2")] - struct Tmpl<'a> { - nonce: &'a str, - server_name: &'a str, - } - let nonce = rand::random::<u64>().to_string(); - - let template = Tmpl { - nonce: &nonce, - server_name: services.config.server_name.as_str(), - }; - Ok(( - [(header::CONTENT_SECURITY_POLICY, format!("default-src 'none' 'nonce-{nonce}';"))], - Html(template.render()?), - )) -} - -#[derive(Debug, thiserror::Error)] -enum WebError { - #[error("Failed to render template: {0}")] - Render(#[from] askama::Error), -} - -impl IntoResponse for WebError { - fn into_response(self) -> Response { - #[derive(Debug, Template)] - #[template(path = "error.html.j2")] - struct Tmpl<'a> { - nonce: &'a str, - err: WebError, - } - - let nonce = rand::random::<u64>().to_string(); - - let status = match &self { - | Self::Render(_) => StatusCode::INTERNAL_SERVER_ERROR, - }; - let tmpl = Tmpl { nonce: &nonce, err: self }; - if let Ok(body) = tmpl.render() { - ( - status, - [( - header::CONTENT_SECURITY_POLICY, - format!("default-src 'none' 'nonce-{nonce}';"), - )], - Html(body), - ) - .into_response() - } else { - (status, "Something went wrong").into_response() - } - } -} diff --git a/src/web/templates/_layout.html.j2 b/src/web/templates/_layout.html.j2 deleted file mode 100644 index fd0a5b29..00000000 --- a/src/web/templates/_layout.html.j2 +++ /dev/null @@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - -<head> - <meta charset="UTF-8" /> - <title>{% block title %}Continuwuity{% endblock %}</title> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - - <style type="text/css" nonce="{{ nonce }}"> - /*<![CDATA[*/ - {{ include_str !("css/index.css") | safe }} - /*]]>*/ - </style> -</head> - -<body> - <main>{%~ block content %}{% endblock ~%}</main> - {%~ block footer ~%} - <footer> - <p>Powered by <a href="https://continuwuity.org">Continuwuity</a> - {%~ if let Some(version_info) = VERSION_EXTRA ~%} - {%~ if let Some(url) = GIT_REMOTE_COMMIT_URL.or(GIT_REMOTE_WEB_URL) ~%} - (<a href="{{ url }}">{{ version_info }}</a>) - {%~ else ~%} - ({{ version_info }}) - {%~ endif ~%} - {%~ endif ~%}</p> - </footer> - {%~ endblock ~%} -</body> - -</html> diff --git a/src/web/templates/error.html.j2 b/src/web/templates/error.html.j2 deleted file mode 100644 index e320d0ed..00000000 --- a/src/web/templates/error.html.j2 +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "_layout.html.j2" %} - -{%- block title -%} -Server Error -{%- endblock -%} - -{%- block content -%} -<h1> - {%- match err -%} - {% else -%} 500: Internal Server Error - {%- endmatch -%} -</h1> - -{%- match err -%} - {% when WebError::Render(err) -%} - <pre>{{ err }}</pre> - {% else -%} <p>An error occurred</p> -{%- endmatch -%} - -{%- endblock -%} diff --git a/src/web/templates/index.html.j2 b/src/web/templates/index.html.j2 deleted file mode 100644 index 7f11cb1c..00000000 --- a/src/web/templates/index.html.j2 +++ /dev/null @@ -1,16 +0,0 @@ -{% extends "_layout.html.j2" %} -{%- block content -%} -<div class="orb"></div> -<div class="panel"> - <h1>Welcome to <a class="project-name" href="https://continuwuity.org">Continuwuity</a>!</h1> - <p>Continuwuity is successfully installed and working. </p> - <p>To get started, you can:</p> - <ul> - <li>Read the <a href="https://continuwuity.org/introduction">documentation</a></li> - <li>Join the <a href="https://matrix.to/#/#continuwuity:continuwuity.org">Continuwuity Matrix room</a> or <a href="https://matrix.to/#/#space:continuwuity.org">space</a></li> - <li>Log in with a <a href="https://matrix.org/ecosystem/clients/">client</a></li> - <li>Ensure <a href="https://federationtester.matrix.org/#{{ server_name }}">federation</a> works</li> - </ul> -</div> - -{%- endblock content -%}