From 81a6e6458ca1c6baf190c2059aadf3c9b9d20d08 Mon Sep 17 00:00:00 2001 From: Mathew Davies Date: Thu, 1 Jun 2023 00:47:58 +0100 Subject: [PATCH 01/12] ci: cleanup github actions (#803) --- .github/workflows/docker-arm.yml | 38 ------------ .github/workflows/docker-armv7.yml | 41 ------------ .../workflows/{docker.yml => main-docker.yml} | 34 +++++++--- .github/workflows/{rust.yml => main-rust.yml} | 37 +++++++---- .github/workflows/pull-request.yml | 62 +++++++++++++++++++ .github/workflows/rust-tests.yml | 22 ------- 6 files changed, 111 insertions(+), 123 deletions(-) delete mode 100644 .github/workflows/docker-arm.yml delete mode 100644 .github/workflows/docker-armv7.yml rename .github/workflows/{docker.yml => main-docker.yml} (50%) rename .github/workflows/{rust.yml => main-rust.yml} (56%) create mode 100644 .github/workflows/pull-request.yml delete mode 100644 .github/workflows/rust-tests.yml diff --git a/.github/workflows/docker-arm.yml b/.github/workflows/docker-arm.yml deleted file mode 100644 index 251e325..0000000 --- a/.github/workflows/docker-arm.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Docker ARM Build - -on: - push: - paths-ignore: - - "**.md" - branches: - - master - -jobs: - build-docker: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Set up QEMU - uses: docker/setup-qemu-action@v1 - with: - platforms: all - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@v1 - with: - version: latest - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - name: Build and push - uses: docker/build-push-action@v2 - with: - context: . - file: ./Dockerfile.arm - platforms: linux/arm64 - push: true - tags: libreddit/libreddit:arm - cache-from: type=gha - cache-to: type=gha,mode=max diff --git a/.github/workflows/docker-armv7.yml b/.github/workflows/docker-armv7.yml deleted file mode 100644 index d2817d8..0000000 --- a/.github/workflows/docker-armv7.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: Docker ARM V7 Build - -on: - push: - paths-ignore: - - "**.md" - branches: - - master - -jobs: - build-docker: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Set up QEMU - id: qemu - uses: docker/setup-qemu-action@v1 - with: - platforms: all - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@v1 - with: - version: latest - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - name: Build and push - id: build_push - uses: docker/build-push-action@v2 - with: - context: . - file: ./Dockerfile.armv7 - platforms: linux/arm/v7 - push: true - tags: libreddit/libreddit:armv7 - cache-from: type=gha - cache-to: type=gha,mode=max diff --git a/.github/workflows/docker.yml b/.github/workflows/main-docker.yml similarity index 50% rename from .github/workflows/docker.yml rename to .github/workflows/main-docker.yml index c90bd4d..9438945 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/main-docker.yml @@ -1,44 +1,58 @@ -name: Docker amd64 Build +name: Docker Build on: push: paths-ignore: - "**.md" branches: - - master + - 'main' + - 'master' jobs: build-docker: runs-on: ubuntu-latest + strategy: + matrix: + config: + - { platform: 'linux/amd64', tag: 'latest', dockerfile: 'Dockerfile' } + - { platform: 'linux/arm64', tag: 'latest-arm', dockerfile: 'Dockerfile.arm' } + - { platform: 'linux/arm/v7', tag: 'latest-armv7', dockerfile: 'Dockerfile.armv7' } steps: - - uses: actions/checkout@v2 + - name: Checkout sources + uses: actions/checkout@v3 + - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v2 with: platforms: all + - name: Set up Docker Buildx id: buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 with: version: latest + - name: Login to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} + - name: Docker Hub Description uses: peter-evans/dockerhub-description@v3 + if: matrix.config.platform == 'linux/amd64' with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} repository: libreddit/libreddit + - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v4 with: context: . - file: ./Dockerfile - platforms: linux/amd64 + file: ./${{ matrix.config.dockerfile }} + platforms: ${{ matrix.config.platform }} push: true - tags: libreddit/libreddit:latest + tags: libreddit/libreddit:${{ matrix.config.tag }} cache-from: type=gha cache-to: type=gha,mode=max diff --git a/.github/workflows/rust.yml b/.github/workflows/main-rust.yml similarity index 56% rename from .github/workflows/rust.yml rename to .github/workflows/main-rust.yml index c233140..5089491 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/main-rust.yml @@ -1,33 +1,44 @@ -name: Rust +name: Rust Build & Publish on: push: paths-ignore: - "**.md" + branches: - - master + - 'main' + - 'master' + + release: + types: [published] env: CARGO_TERM_COLOR: always jobs: build: - runs-on: ubuntu-18.04 + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - name: Checkout sources + uses: actions/checkout@v3 - name: Cache Packages - uses: Swatinem/rust-cache@v1.0.1 + uses: Swatinem/rust-cache@2 + + - name: Install stable toolchain + uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable - name: Build run: cargo build --release - name: Publish to crates.io - continue-on-error: true + if: github.event_name == 'release' run: cargo publish --no-verify --token ${{ secrets.CARGO_REGISTRY_TOKEN }} - - uses: actions/upload-artifact@v2.2.1 + - uses: actions/upload-artifact@v3 name: Upload a Build Artifact with: name: libreddit @@ -35,23 +46,25 @@ jobs: - name: Versions id: version - run: | - echo "::set-output name=version::$(cargo metadata --format-version 1 --no-deps | jq .packages[0].version -r | sed 's/^/v/')" - echo "::set-output name=tag::$(git describe --tags)" + run: echo "VERSION=$(cargo metadata --format-version 1 --no-deps | jq .packages[0].version -r | sed 's/^/v/')" >> "$GITHUB_OUTPUT" - name: Calculate SHA512 checksum run: sha512sum target/release/libreddit > libreddit.sha512 + + - name: Calculate SHA256 checksum + run: sha256sum target/release/libreddit > libreddit.sha256 - name: Release uses: softprops/action-gh-release@v1 if: github.base_ref != 'master' with: - tag_name: ${{ steps.version.outputs.version }} - name: ${{ steps.version.outputs.version }} - ${{ github.event.head_commit.message }} + tag_name: ${{ steps.version.outputs.VERSION }} + name: ${{ steps.version.outputs.VERSION }} - ${{ github.event.head_commit.message }} draft: true files: | target/release/libreddit libreddit.sha512 + libreddit.sha256 body: | - ${{ github.event.head_commit.message }} ${{ github.sha }} generate_release_notes: true diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml new file mode 100644 index 0000000..5a9491d --- /dev/null +++ b/.github/workflows/pull-request.yml @@ -0,0 +1,62 @@ +name: Pull Request + +on: + push: + branches: + - 'main' + - 'master' + + pull_request: + branches: + - 'main' + - 'master' + +jobs: + test: + name: cargo test + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v3 + + - name: Install stable toolchain + uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable + + - name: Run cargo test + run: cargo test + + format: + name: cargo fmt --all -- --check + runs-on: ubuntu-latest + + steps: + - name: Checkout sources + uses: actions/checkout@v3 + + - name: Install stable toolchain with rustfmt component + uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable + components: rustfmt + + - name: Run cargo fmt + run: cargo fmt --all -- --check + + clippy: + name: cargo clippy -- -D warnings + runs-on: ubuntu-latest + + steps: + - name: Checkout sources + uses: actions/checkout@v3 + + - name: Install stable toolchain with clippy component + uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable + components: clippy + + - name: Run cargo clippy + run: cargo clippy -- -D warnings \ No newline at end of file diff --git a/.github/workflows/rust-tests.yml b/.github/workflows/rust-tests.yml deleted file mode 100644 index c93aadf..0000000 --- a/.github/workflows/rust-tests.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Tests - -on: - push: - branches: [ "master" ] - pull_request: - branches: [ "master" ] - -env: - CARGO_TERM_COLOR: always - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - name: Build - run: cargo build --verbose - - name: Run tests - run: cargo test --verbose From b5fc4bef288bf82b68ae77dc14a363db54f20619 Mon Sep 17 00:00:00 2001 From: Matthew Esposito Date: Wed, 31 May 2023 19:50:38 -0400 Subject: [PATCH 02/12] Fix github-actions versioning --- .github/workflows/main-rust.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main-rust.yml b/.github/workflows/main-rust.yml index 5089491..13f5e33 100644 --- a/.github/workflows/main-rust.yml +++ b/.github/workflows/main-rust.yml @@ -24,7 +24,7 @@ jobs: uses: actions/checkout@v3 - name: Cache Packages - uses: Swatinem/rust-cache@2 + uses: Swatinem/rust-cache@v2 - name: Install stable toolchain uses: dtolnay/rust-toolchain@stable From 97f0f6905912128ae45ac96313fe6e2268324b13 Mon Sep 17 00:00:00 2001 From: Nazar <63452145+Tokarak@users.noreply.github.com> Date: Sat, 3 Jun 2023 19:32:46 +0200 Subject: [PATCH 03/12] Rebase #811 (#812) Co-authored-by: Matthew Esposito --- README.md | 1 + app.json | 3 +++ src/config.rs | 19 ++++++++++++++++++- src/instance_info.rs | 4 ++++ src/post.rs | 7 +++++-- src/utils.rs | 4 +++- 6 files changed, 34 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3b13d49..0330486 100644 --- a/README.md +++ b/README.md @@ -214,6 +214,7 @@ Assign a default value for each instance-specific setting by passing environment | `SFW_ONLY` | `["on", "off"]` | `off` | Enables SFW-only mode for the instance, i.e. all NSFW content is filtered. | | `BANNER` | String | (empty) | Allows the server to set a banner to be displayed. Currently this is displayed on the instance info page. | | `ROBOTS_DISABLE_INDEXING` | `["on", "off"]` | `off` | Disables indexing of the instance by search engines. | +| `PUSHSHIFT_FRONTEND` | String | `www.unddit.com` | Allows the server to set the Pushshift frontend to be used with "removed" links. ## Default User Settings diff --git a/app.json b/app.json index 0da7058..c6b60c5 100644 --- a/app.json +++ b/app.json @@ -58,6 +58,9 @@ }, "LIBREDDIT_DEFAULT_DISABLE_VISIT_REDDIT_CONFIRMATION": { "required": false + }, + "LIBREDDIT_PUSHSHIFT_FRONTEND": { + "required": false } } } diff --git a/src/config.rs b/src/config.rs index 4107582..602a012 100644 --- a/src/config.rs +++ b/src/config.rs @@ -9,12 +9,16 @@ use std::{env::var, fs::read_to_string}; // first request) and contains the instance settings. pub(crate) static CONFIG: Lazy = Lazy::new(Config::load); +// This serves as the frontend for the Pushshift API - on removed comments, this URL will +// be the base of a link, to display removed content (on another site). +pub(crate) const DEFAULT_PUSHSHIFT_FRONTEND: &str = "www.unddit.com"; + /// Stores the configuration parsed from the environment variables and the /// config file. `Config::Default()` contains None for each setting. /// When adding more config settings, add it to `Config::load`, /// `get_setting_from_config`, both below, as well as /// instance_info::InstanceInfo.to_string(), README.md and app.json. -#[derive(Default, Serialize, Deserialize, Clone)] +#[derive(Default, Serialize, Deserialize, Clone, Debug)] pub struct Config { #[serde(rename = "LIBREDDIT_SFW_ONLY")] pub(crate) sfw_only: Option, @@ -63,6 +67,9 @@ pub struct Config { #[serde(rename = "LIBREDDIT_ROBOTS_DISABLE_INDEXING")] pub(crate) robots_disable_indexing: Option, + + #[serde(rename = "LIBREDDIT_PUSHSHIFT_FRONTEND")] + pub(crate) pushshift: Option, } impl Config { @@ -77,6 +84,7 @@ impl Config { // environment variables with "LIBREDDIT", then check the config, then if // both are `None`, return a `None` via the `map_or_else` function let parse = |key: &str| -> Option { var(key).ok().map_or_else(|| get_setting_from_config(key, &config), Some) }; + Self { sfw_only: parse("LIBREDDIT_SFW_ONLY"), default_theme: parse("LIBREDDIT_DEFAULT_THEME"), @@ -94,6 +102,7 @@ impl Config { default_disable_visit_reddit_confirmation: parse("LIBREDDIT_DEFAULT_DISABLE_VISIT_REDDIT_CONFIRMATION"), banner: parse("LIBREDDIT_BANNER"), robots_disable_indexing: parse("LIBREDDIT_ROBOTS_DISABLE_INDEXING"), + pushshift: parse("LIBREDDIT_PUSHSHIFT_FRONTEND"), } } } @@ -116,6 +125,7 @@ fn get_setting_from_config(name: &str, config: &Config) -> Option { "LIBREDDIT_DEFAULT_DISABLE_VISIT_REDDIT_CONFIRMATION" => config.default_disable_visit_reddit_confirmation.clone(), "LIBREDDIT_BANNER" => config.banner.clone(), "LIBREDDIT_ROBOTS_DISABLE_INDEXING" => config.robots_disable_indexing.clone(), + "LIBREDDIT_PUSHSHIFT_FRONTEND" => config.pushshift.clone(), _ => None, } } @@ -128,6 +138,13 @@ pub(crate) fn get_setting(name: &str) -> Option { #[cfg(test)] use {sealed_test::prelude::*, std::fs::write}; +#[test] +fn test_deserialize() { + // Must handle empty input + let result = toml::from_str::(""); + assert!(result.is_ok(), "Error: {}", result.unwrap_err()); +} + #[test] #[sealed_test(env = [("LIBREDDIT_SFW_ONLY", "on")])] fn test_env_var() { diff --git a/src/instance_info.rs b/src/instance_info.rs index f61796c..daa06e2 100644 --- a/src/instance_info.rs +++ b/src/instance_info.rs @@ -122,6 +122,8 @@ impl InstanceInfo { ["Deploy timestamp", &self.deploy_unix_ts.to_string()], ["Compile mode", &self.compile_mode], ["SFW only", &convert(&self.config.sfw_only)], + ["Pushshift frontend", &convert(&self.config.pushshift)], + //TODO: fallback to crate::config::DEFAULT_PUSHSHIFT_FRONTEND ]) .with_header_row(["Settings"]), ); @@ -155,6 +157,7 @@ impl InstanceInfo { Deploy timestamp: {}\n Compile mode: {}\n SFW only: {:?}\n + Pushshift frontend: {:?}\n Config:\n Banner: {:?}\n Hide awards: {:?}\n @@ -175,6 +178,7 @@ impl InstanceInfo { self.deploy_unix_ts, self.compile_mode, self.config.sfw_only, + self.config.pushshift, self.config.banner, self.config.default_hide_awards, self.config.default_theme, diff --git a/src/post.rs b/src/post.rs index 0f97b2e..98dcac3 100644 --- a/src/post.rs +++ b/src/post.rs @@ -1,5 +1,6 @@ // CRATES use crate::client::json; +use crate::config::get_setting; use crate::server::RequestExt; use crate::subreddit::{can_access_quarantine, quarantine}; use crate::utils::{ @@ -169,8 +170,10 @@ fn build_comment( let body = if (val(comment, "author") == "[deleted]" && val(comment, "body") == "[removed]") || val(comment, "body") == "[ Removed by Reddit ]" { format!( - "

[removed] — view removed comment

", - post_link, id + "

[removed] — view removed comment

", + get_setting("LIBREDDIT_PUSHSHIFT_FRONTEND").unwrap_or(String::from(crate::config::DEFAULT_PUSHSHIFT_FRONTEND)), + post_link, + id ) } else { rewrite_urls(&val(comment, "body_html")) diff --git a/src/utils.rs b/src/utils.rs index a084af7..5cf4b7d 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,3 +1,4 @@ +use crate::config::get_setting; // // CRATES // @@ -662,7 +663,8 @@ pub async fn parse_post(post: &serde_json::Value) -> Post { let body = if val(post, "removed_by_category") == "moderator" { format!( - "

[removed] — view removed post

", + "

[removed] — view removed post

", + get_setting("LIBREDDIT_PUSHSHIFT_FRONTEND").unwrap_or(String::from(crate::config::DEFAULT_PUSHSHIFT_FRONTEND)), permalink ) } else { From 0c743056173f6a5a58e9172d54476ed2b532027e Mon Sep 17 00:00:00 2001 From: Matthew Esposito Date: Sat, 3 Jun 2023 14:19:20 -0400 Subject: [PATCH 04/12] Add MUSL builds to GH Actions and fix Release event trigger (#810) --- .github/workflows/main-rust.yml | 52 +++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/.github/workflows/main-rust.yml b/.github/workflows/main-rust.yml index 13f5e33..d6486c8 100644 --- a/.github/workflows/main-rust.yml +++ b/.github/workflows/main-rust.yml @@ -31,32 +31,51 @@ jobs: with: toolchain: stable + # Building actions - name: Build run: cargo build --release - - name: Publish to crates.io - if: github.event_name == 'release' - run: cargo publish --no-verify --token ${{ secrets.CARGO_REGISTRY_TOKEN }} - - - uses: actions/upload-artifact@v3 - name: Upload a Build Artifact - with: - name: libreddit - path: target/release/libreddit - - - name: Versions - id: version - run: echo "VERSION=$(cargo metadata --format-version 1 --no-deps | jq .packages[0].version -r | sed 's/^/v/')" >> "$GITHUB_OUTPUT" - - name: Calculate SHA512 checksum run: sha512sum target/release/libreddit > libreddit.sha512 - name: Calculate SHA256 checksum run: sha256sum target/release/libreddit > libreddit.sha256 + + - name: Build MUSL + run: cargo build --release --target x86_64-unknown-linux-musl + + - name: Calculate MUSL SHA512 checksum + run: sha512sum target/x86_64-unknown-linux-musl/release/libreddit > libreddit-musl.sha512 + + - name: Calculate MUSL SHA256 checksum + run: sha256sum target/x86_64-unknown-linux-musl/release/libreddit > libreddit-musl.sha256 + + - name: Move MUSL binary + run: mv target/x86_64-unknown-linux-musl/release/libreddit target/x86_64-unknown-linux-musl/release/libreddit-musl + + - uses: actions/upload-artifact@v3 + name: Upload a Build Artifact + with: + name: libreddit + path: | + target/release/libreddit + target/x86_64-unknown-linux-musl/release/libreddit-musl + *.sha512 + *.sha256 + - name: Versions + id: version + run: echo "VERSION=$(cargo metadata --format-version 1 --no-deps | jq .packages[0].version -r | sed 's/^/v/')" >> "$GITHUB_OUTPUT" + + # Publishing actions + + - name: Publish to crates.io + if: github.event_name == 'release' + run: cargo publish --no-verify --token ${{ secrets.CARGO_REGISTRY_TOKEN }} + - name: Release uses: softprops/action-gh-release@v1 - if: github.base_ref != 'master' + if: github.base_ref != 'master' && github.event_name == 'release' with: tag_name: ${{ steps.version.outputs.VERSION }} name: ${{ steps.version.outputs.VERSION }} - ${{ github.event.head_commit.message }} @@ -65,6 +84,9 @@ jobs: target/release/libreddit libreddit.sha512 libreddit.sha256 + target/x86_64-unknown-linux-musl/release/libreddit-musl + libreddit-musl.sha512 + libreddit-musl.sha256 body: | - ${{ github.event.head_commit.message }} ${{ github.sha }} generate_release_notes: true From 0bcebff6f2d56d554be5d4b9c717aafe0d8b02c8 Mon Sep 17 00:00:00 2001 From: Matthew Esposito Date: Sat, 3 Jun 2023 14:24:19 -0400 Subject: [PATCH 05/12] Fix YAML formatting --- .github/workflows/main-rust.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main-rust.yml b/.github/workflows/main-rust.yml index d6486c8..48064e0 100644 --- a/.github/workflows/main-rust.yml +++ b/.github/workflows/main-rust.yml @@ -58,10 +58,10 @@ jobs: with: name: libreddit path: | - target/release/libreddit - target/x86_64-unknown-linux-musl/release/libreddit-musl - *.sha512 - *.sha256 + target/release/libreddit + target/x86_64-unknown-linux-musl/release/libreddit-musl + *.sha512 + *.sha256 - name: Versions id: version From 510d9677772289363b20d9c094085836f1eb9a92 Mon Sep 17 00:00:00 2001 From: Matthew Esposito Date: Sat, 3 Jun 2023 14:33:27 -0400 Subject: [PATCH 06/12] Add MUSL target --- .github/workflows/main-rust.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main-rust.yml b/.github/workflows/main-rust.yml index 48064e0..a2b53f6 100644 --- a/.github/workflows/main-rust.yml +++ b/.github/workflows/main-rust.yml @@ -30,6 +30,7 @@ jobs: uses: dtolnay/rust-toolchain@stable with: toolchain: stable + targets: "x86_64-unknown-linux-gnu,x86_64-unknown-linux-musl" # Building actions - name: Build From f9fd54aa3c416ff5fca7247a017189a03b387842 Mon Sep 17 00:00:00 2001 From: Tokarak <63452145+Tokarak@users.noreply.github.com> Date: Sat, 3 Jun 2023 19:07:09 +0100 Subject: [PATCH 07/12] Specify newer dependencies + cargo update --- Cargo.lock | 338 ++++++++++++++++++++++++++++------------------------- Cargo.toml | 12 +- 2 files changed, 184 insertions(+), 166 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8815726..42fb6ac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,6 +17,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "aho-corasick" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" +dependencies = [ + "memchr", +] + [[package]] name = "alloc-no-stdlib" version = "2.0.4" @@ -40,24 +49,26 @@ checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d" [[package]] name = "askama" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb98f10f371286b177db5eeb9a6e5396609555686a35e1d4f7b9a9c6d8af0139" +checksum = "47cbc3cf73fa8d9833727bbee4835ba5c421a0d65b72daf9a7b5d0e0f9cfb57e" dependencies = [ "askama_derive", "askama_escape", - "askama_shared", ] [[package]] name = "askama_derive" -version = "0.11.2" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87bf87e6e8b47264efa9bde63d6225c6276a52e05e91bf37eaa8afd0032d6b71" +checksum = "c22fbe0413545c098358e56966ff22cdd039e10215ae213cfbd65032b119fc94" dependencies = [ - "askama_shared", + "mime", + "mime_guess", + "nom", "proc-macro2", - "syn 1.0.109", + "quote", + "syn 2.0.18", ] [[package]] @@ -66,21 +77,6 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" -[[package]] -name = "askama_shared" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf722b94118a07fcbc6640190f247334027685d4e218b794dbfe17c32bf38ed0" -dependencies = [ - "askama_escape", - "mime", - "mime_guess", - "nom", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "async-trait" version = "0.1.68" @@ -89,7 +85,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] @@ -106,9 +102,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "base64" -version = "0.21.0" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" [[package]] name = "bitflags" @@ -148,9 +144,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" +checksum = "a246e68bb43f6cd9db24bea052a53e40405417c5fb372e3d1a8a7f770a564ef5" dependencies = [ "memchr", "serde", @@ -164,9 +160,9 @@ checksum = "3108fe6fe7ac796fb7625bdde8fa2b67b5a7731496251ca57c7b8cadd78a16a1" [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" [[package]] name = "bytes" @@ -176,9 +172,9 @@ checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "cached" -version = "0.42.0" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5877db5d1af7fae60d06b5db9430b68056a69b3582a0be8e3691e87654aeb6" +checksum = "bc2fafddf188d13788e7099295a59b99e99b2148ab2195cae454e754cc099925" dependencies = [ "async-trait", "async_once", @@ -226,18 +222,18 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.2.3" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f9152d70e42172fdb87de2efd7327160beee37886027cf86f30a233d5b30b4" +checksum = "b4ed2379f8603fa2b7509891660e802b88c70a79a6427a70abb5968054de2c28" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.2.3" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e067b220911598876eb55d52725ddcc201ffe3f0904018195973bc5b012ea2ca" +checksum = "72394f3339a76daf211e57d4bcb374410f3965dcc606dd0e03738c7888766980" dependencies = [ "anstyle", "bitflags", @@ -246,15 +242,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" +checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" [[package]] name = "cookie" -version = "0.16.2" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" dependencies = [ "time", "version_check", @@ -278,9 +274,9 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" +checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" dependencies = [ "libc", ] @@ -341,9 +337,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", @@ -486,24 +482,13 @@ dependencies = [ "version_check", ] -[[package]] -name = "getrandom" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - [[package]] name = "globset" version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" dependencies = [ - "aho-corasick", + "aho-corasick 0.7.20", "bstr", "fnv", "log", @@ -512,9 +497,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" +checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" dependencies = [ "bytes", "fnv", @@ -616,9 +601,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.2" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7" dependencies = [ "http", "hyper", @@ -666,9 +651,9 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ "hermit-abi 0.3.1", "libc", @@ -683,9 +668,9 @@ checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "js-sys" -version = "0.3.61" +version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790" dependencies = [ "wasm-bindgen", ] @@ -698,15 +683,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.141" +version = "0.2.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" +checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" [[package]] name = "libflate" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97822bf791bd4d5b403713886a5fbe8bf49520fe78e323b0dc480ca1a03e50b0" +checksum = "5ff4ae71b685bbad2f2f391fe74f6b7659a34871c08b210fdc039e43bee07d18" dependencies = [ "adler32", "crc32fast", @@ -754,15 +739,15 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.3.2" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f508063cc7bb32987c71511216bd5a32be15bccb6a80b52df8b9d7f01fc3aa2" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "lipsum" -version = "0.8.2" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8451846f1f337e44486666989fbce40be804da139d5a4477d6b88ece5dc69f4" +checksum = "9c5e9ef2d2ad6fe67a59ace27c203c8d3a71d195532ee82e3bbe0d5f9a9ca541" dependencies = [ "rand", "rand_chacha", @@ -780,12 +765,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de" [[package]] name = "memchr" @@ -817,14 +799,13 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "mio" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", - "log", "wasi", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -858,9 +839,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.17.1" +version = "1.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" +checksum = "9670a07f94779e00908f3e686eab508878ebb390ba6e604d3a284c00e8d0487b" [[package]] name = "openssl-probe" @@ -923,9 +904,9 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro2" -version = "1.0.56" +version = "1.0.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b" dependencies = [ "unicode-ident", ] @@ -938,9 +919,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" dependencies = [ "proc-macro2", ] @@ -951,8 +932,6 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "libc", - "rand_chacha", "rand_core", ] @@ -971,9 +950,6 @@ name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] [[package]] name = "redox_syscall" @@ -995,20 +971,20 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.3" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" +checksum = "81ca098a9821bd52d6b24fd8b10bd081f47d39c22778cafaa75a2857a62c6390" dependencies = [ - "aho-corasick", + "aho-corasick 1.0.1", "memchr", "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" [[package]] name = "ring" @@ -1074,9 +1050,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.12" +version = "0.37.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "722529a737f5a942fdbac3a46cee213053196737c5eaa3386d52e85b786f2659" +checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" dependencies = [ "bitflags", "errno", @@ -1088,14 +1064,14 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.8" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +checksum = "c911ba11bc8433e811ce56fde130ccf32f5127cab0e0194e9c68c5a5b671791e" dependencies = [ "log", "ring", + "rustls-webpki", "sct", - "webpki", ] [[package]] @@ -1119,6 +1095,16 @@ dependencies = [ "base64", ] +[[package]] +name = "rustls-webpki" +version = "0.100.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rusty-forkfork" version = "0.4.0" @@ -1195,9 +1181,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.8.2" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" dependencies = [ "bitflags", "core-foundation", @@ -1208,9 +1194,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" dependencies = [ "core-foundation-sys", "libc", @@ -1218,22 +1204,22 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.160" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" +checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.160" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" +checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] @@ -1247,6 +1233,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93107647184f6027e3b7dcb2e11034cf95ffa1e3a682c67951963ac69c1c007d" +dependencies = [ + "serde", +] + [[package]] name = "serde_yaml" version = "0.9.21" @@ -1330,9 +1325,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.15" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" +checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" dependencies = [ "proc-macro2", "quote", @@ -1369,14 +1364,14 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] name = "time" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" +checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" dependencies = [ "itoa", "libc", @@ -1388,15 +1383,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" [[package]] name = "time-macros" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" +checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" dependencies = [ "time-core", ] @@ -1418,9 +1413,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.27.0" +version = "1.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" +checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" dependencies = [ "autocfg", "bytes", @@ -1432,36 +1427,35 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] name = "tokio-rustls" -version = "0.23.4" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +checksum = "e0d409377ff5b1e3ca6437aa86c1eb7d40c134bfec254e44c830defa92669db5" dependencies = [ "rustls", "tokio", - "webpki", ] [[package]] name = "tokio-util" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" dependencies = [ "bytes", "futures-core", @@ -1473,11 +1467,36 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.11" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "d6135d499e69981f9ff0ef2167955a5333c35e36f6937d382974566b3d5b94ec" dependencies = [ "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a76a9312f5ba4c2dec6b9161fdf25d87ad8a09256ccea5a556fef03c706a10f" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380d56e8670370eee6566b0bfd4265f65b3f432e8c6d85623f728d4fa31f739" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", ] [[package]] @@ -1499,9 +1518,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ "once_cell", ] @@ -1535,9 +1554,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" [[package]] name = "unicode-normalization" @@ -1620,9 +1639,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1630,24 +1649,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.18", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1655,43 +1674,33 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.18", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" +checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93" [[package]] name = "web-sys" -version = "0.3.61" +version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2" dependencies = [ "js-sys", "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "winapi" version = "0.3.9" @@ -1869,3 +1878,12 @@ name = "windows_x86_64_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + +[[package]] +name = "winnow" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699" +dependencies = [ + "memchr", +] diff --git a/Cargo.toml b/Cargo.toml index fe0d8df..529f3c0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,15 +8,15 @@ authors = ["spikecodes <19519553+spikecodes@users.noreply.github.com>"] edition = "2021" [dependencies] -askama = { version = "0.11.1", default-features = false } -cached = "0.42.0" +askama = { version = "0.12.0", default-features = false } +cached = "0.43.0" clap = { version = "4.1.1", default-features = false, features = ["std", "env"] } regex = "1.7.1" serde = { version = "1.0.152", features = ["derive"] } -cookie = "0.16.2" +cookie = "0.17.0" futures-lite = "1.12.0" hyper = { version = "0.14.23", features = ["full"] } -hyper-rustls = "0.23.2" +hyper-rustls = "0.24.0" percent-encoding = "2.2.0" route-recognizer = "0.3.1" serde_json = "1.0.91" @@ -26,13 +26,13 @@ url = "2.3.1" rust-embed = { version = "6.4.2", features = ["include-exclude"] } libflate = "1.2.0" brotli = { version = "3.3.4", features = ["std"] } -toml = "0.5.10" +toml = "0.7.4" once_cell = "1.17.0" serde_yaml = "0.9.16" build_html = "2.2.0" [dev-dependencies] -lipsum = "0.8.2" +lipsum = "0.9.0" sealed_test = "1.0.0" [profile.release] From f3c835bee7d6bfda542738b2e0112b3a09b1aff7 Mon Sep 17 00:00:00 2001 From: Tokarak <63452145+Tokarak@users.noreply.github.com> Date: Sat, 3 Jun 2023 20:02:02 +0100 Subject: [PATCH 08/12] Proof-read README.md --- README.md | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 0330486..5b7efae 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ --- -**10 second pitch:** Libreddit is a portmanteau of "libre" (meaning freedom) and "Reddit". It is a private front-end like [Invidious](https://github.com/iv-org/invidious) but for Reddit. Browse the coldest takes of [r/unpopularopinion](https://libreddit.spike.codes/r/unpopularopinion) without being [tracked](#reddit). +**10-second pitch:** Libreddit is a portmanteau of "libre" (meaning freedom) and "Reddit". It is a private front-end like [Invidious](https://github.com/iv-org/invidious) but for Reddit. Browse the coldest takes of [r/unpopularopinion](https://libreddit.spike.codes/r/unpopularopinion) without being [tracked](#reddit). - 🚀 Fast: written in Rust for blazing-fast speeds and memory safety - ☁️ Light: no JavaScript, no ads, no tracking, no bloat @@ -31,7 +31,7 @@ I appreciate any donations! Your support allows me to continue developing Libred 🔗 **Want to automatically redirect Reddit links to Libreddit? Use [LibRedirect](https://github.com/libredirect/libredirect) or [Privacy Redirect](https://github.com/SimonBrazell/privacy-redirect)!** -[Follow this link](https://github.com/libreddit/libreddit-instances/blob/master/instances.md) for an up-to-date table of instances in markdown format. This list is also available as [a machine-readable JSON](https://github.com/libreddit/libreddit-instances/blob/master/instances.json). +[Follow this link](https://github.com/libreddit/libreddit-instances/blob/master/instances.md) for an up-to-date table of instances in Markdown format. This list is also available as [a machine-readable JSON](https://github.com/libreddit/libreddit-instances/blob/master/instances.json). Both files are part of the [libreddit-instances](https://github.com/libreddit/libreddit-instances) repository. To contribute your [self-hosted instance](#deployment) to the list, see the [libreddit-instances README](https://github.com/libreddit/libreddit-instances/blob/master/README.md). @@ -55,7 +55,7 @@ Libreddit currently implements most of Reddit's (signed-out) functionalities but ## How does it compare to Teddit? -Teddit is another awesome open source project designed to provide an alternative frontend to Reddit. There is no connection between the two and you're welcome to use whichever one you favor. Competition fosters innovation and Teddit's release has motivated me to build Libreddit into an even more polished product. +Teddit is another awesome open source project designed to provide an alternative frontend to Reddit. There is no connection between the two, and you're welcome to use whichever one you favor. Competition fosters innovation and Teddit's release has motivated me to build Libreddit into an even more polished product. If you are looking to compare, the biggest differences I have noticed are: - Libreddit is themed around Reddit's redesign whereas Teddit appears to stick much closer to Reddit's old design. This may suit some users better as design is always subjective. @@ -189,7 +189,7 @@ If you're on Linux and none of these methods work for you, you can grab a Linux ## 6) Replit/Heroku/Glitch > **Warning** -> These are free hosting options but they are *not* private and will monitor server usage to prevent abuse. If you need a free and easy setup, this method may work best for you. +> These are free hosting options, but they are *not* private and will monitor server usage to prevent abuse. If you need a free and easy setup, this method may work best for you. Run on Repl.it [![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/libreddit/libreddit) @@ -209,33 +209,33 @@ libreddit Assign a default value for each instance-specific setting by passing environment variables to Libreddit in the format `LIBREDDIT_{X}`. Replace `{X}` with the setting name (see list below) in capital letters. -|Name|Possible values|Default value|Description| -|-|-|-|-| -| `SFW_ONLY` | `["on", "off"]` | `off` | Enables SFW-only mode for the instance, i.e. all NSFW content is filtered. | -| `BANNER` | String | (empty) | Allows the server to set a banner to be displayed. Currently this is displayed on the instance info page. | -| `ROBOTS_DISABLE_INDEXING` | `["on", "off"]` | `off` | Disables indexing of the instance by search engines. | -| `PUSHSHIFT_FRONTEND` | String | `www.unddit.com` | Allows the server to set the Pushshift frontend to be used with "removed" links. +| Name | Possible values | Default value | Description | +|---------------------------|-----------------|------------------|-----------------------------------------------------------------------------------------------------------| +| `SFW_ONLY` | `["on", "off"]` | `off` | Enables SFW-only mode for the instance, i.e. all NSFW content is filtered. | +| `BANNER` | String | (empty) | Allows the server to set a banner to be displayed. Currently this is displayed on the instance info page. | +| `ROBOTS_DISABLE_INDEXING` | `["on", "off"]` | `off` | Disables indexing of the instance by search engines. | +| `PUSHSHIFT_FRONTEND` | String | `www.unddit.com` | Allows the server to set the Pushshift frontend to be used with "removed" links. | ## Default User Settings Assign a default value for each user-modifiable setting by passing environment variables to Libreddit in the format `LIBREDDIT_DEFAULT_{Y}`. Replace `{Y}` with the setting name (see list below) in capital letters. -| Name | Possible values | Default value | -|-------------------------|-----------------------------------------------------------------------------------------------------|---------------| -| `THEME` | `["system", "light", "dark", "black", "dracula", "nord", "laserwave", "violet", "gold", "rosebox", "gruvboxdark", "gruvboxlight"]` | `system` | -| `FRONT_PAGE` | `["default", "popular", "all"]` | `default` | -| `LAYOUT` | `["card", "clean", "compact"]` | `card` | -| `WIDE` | `["on", "off"]` | `off` | -| `POST_SORT` | `["hot", "new", "top", "rising", "controversial"]` | `hot` | -| `COMMENT_SORT` | `["confidence", "top", "new", "controversial", "old"]` | `confidence` | -| `SHOW_NSFW` | `["on", "off"]` | `off` | -| `BLUR_NSFW` | `["on", "off"]` | `off` | -| `USE_HLS` | `["on", "off"]` | `off` | -| `HIDE_HLS_NOTIFICATION` | `["on", "off"]` | `off` | -| `AUTOPLAY_VIDEOS` | `["on", "off"]` | `off` | -| `SUBSCRIPTIONS` | `+`-delimited list of subreddits (`sub1+sub2+sub3+...`) | _(none)_ | -| `HIDE_AWARDS` | `["on", "off"]` | `off` -| `DISABLE_VISIT_REDDIT_CONFIRMATION` | `["on", "off"]` | `off` | +| Name | Possible values | Default value | +|-------------------------------------|------------------------------------------------------------------------------------------------------------------------------------|---------------| +| `THEME` | `["system", "light", "dark", "black", "dracula", "nord", "laserwave", "violet", "gold", "rosebox", "gruvboxdark", "gruvboxlight"]` | `system` | +| `FRONT_PAGE` | `["default", "popular", "all"]` | `default` | +| `LAYOUT` | `["card", "clean", "compact"]` | `card` | +| `WIDE` | `["on", "off"]` | `off` | +| `POST_SORT` | `["hot", "new", "top", "rising", "controversial"]` | `hot` | +| `COMMENT_SORT` | `["confidence", "top", "new", "controversial", "old"]` | `confidence` | +| `SHOW_NSFW` | `["on", "off"]` | `off` | +| `BLUR_NSFW` | `["on", "off"]` | `off` | +| `USE_HLS` | `["on", "off"]` | `off` | +| `HIDE_HLS_NOTIFICATION` | `["on", "off"]` | `off` | +| `AUTOPLAY_VIDEOS` | `["on", "off"]` | `off` | +| `SUBSCRIPTIONS` | `+`-delimited list of subreddits (`sub1+sub2+sub3+...`) | _(none)_ | +| `HIDE_AWARDS` | `["on", "off"]` | `off` | +| `DISABLE_VISIT_REDDIT_CONFIRMATION` | `["on", "off"]` | `off` | You can also configure Libreddit with a configuration file. An example `libreddit.toml` can be found below: From 221260c282fc2745f7ca81135e591d027bd3a1e0 Mon Sep 17 00:00:00 2001 From: Matthew Esposito Date: Sat, 3 Jun 2023 16:12:48 -0400 Subject: [PATCH 09/12] Remove MUSL, build statically via flags --- .github/workflows/main-rust.yml | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/.github/workflows/main-rust.yml b/.github/workflows/main-rust.yml index a2b53f6..49be720 100644 --- a/.github/workflows/main-rust.yml +++ b/.github/workflows/main-rust.yml @@ -30,11 +30,10 @@ jobs: uses: dtolnay/rust-toolchain@stable with: toolchain: stable - targets: "x86_64-unknown-linux-gnu,x86_64-unknown-linux-musl" # Building actions - name: Build - run: cargo build --release + run: RUSTFLAGS='-C target-feature=+crt-static' cargo build --release - name: Calculate SHA512 checksum run: sha512sum target/release/libreddit > libreddit.sha512 @@ -42,27 +41,14 @@ jobs: - name: Calculate SHA256 checksum run: sha256sum target/release/libreddit > libreddit.sha256 - - name: Build MUSL - run: cargo build --release --target x86_64-unknown-linux-musl - - - name: Calculate MUSL SHA512 checksum - run: sha512sum target/x86_64-unknown-linux-musl/release/libreddit > libreddit-musl.sha512 - - - name: Calculate MUSL SHA256 checksum - run: sha256sum target/x86_64-unknown-linux-musl/release/libreddit > libreddit-musl.sha256 - - - name: Move MUSL binary - run: mv target/x86_64-unknown-linux-musl/release/libreddit target/x86_64-unknown-linux-musl/release/libreddit-musl - - uses: actions/upload-artifact@v3 name: Upload a Build Artifact with: name: libreddit path: | target/release/libreddit - target/x86_64-unknown-linux-musl/release/libreddit-musl - *.sha512 - *.sha256 + libreddit.sha512 + libreddit.sha256 - name: Versions id: version @@ -85,9 +71,6 @@ jobs: target/release/libreddit libreddit.sha512 libreddit.sha256 - target/x86_64-unknown-linux-musl/release/libreddit-musl - libreddit-musl.sha512 - libreddit-musl.sha256 body: | - ${{ github.event.head_commit.message }} ${{ github.sha }} generate_release_notes: true From 05ae39f743f395a023ff2949324d0feb8539f2fd Mon Sep 17 00:00:00 2001 From: Matthew Esposito Date: Sat, 3 Jun 2023 16:15:24 -0400 Subject: [PATCH 10/12] Update RUSTFLAGS --- .github/workflows/main-rust.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main-rust.yml b/.github/workflows/main-rust.yml index 49be720..73a9908 100644 --- a/.github/workflows/main-rust.yml +++ b/.github/workflows/main-rust.yml @@ -33,7 +33,7 @@ jobs: # Building actions - name: Build - run: RUSTFLAGS='-C target-feature=+crt-static' cargo build --release + run: RUSTFLAGS='-C target-feature=+crt-static' cargo build --release --target x86_64-unknown-linux-gnu - name: Calculate SHA512 checksum run: sha512sum target/release/libreddit > libreddit.sha512 From c1dd1a091e6761aafff256ac1ecd32ca35c1f71b Mon Sep 17 00:00:00 2001 From: Matthew Esposito Date: Sat, 3 Jun 2023 16:30:58 -0400 Subject: [PATCH 11/12] Update release binary paths --- .github/workflows/main-rust.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main-rust.yml b/.github/workflows/main-rust.yml index 73a9908..69714fb 100644 --- a/.github/workflows/main-rust.yml +++ b/.github/workflows/main-rust.yml @@ -36,17 +36,17 @@ jobs: run: RUSTFLAGS='-C target-feature=+crt-static' cargo build --release --target x86_64-unknown-linux-gnu - name: Calculate SHA512 checksum - run: sha512sum target/release/libreddit > libreddit.sha512 + run: sha512sum target/x86_64-unknown-linux-gnu/release/libreddit > libreddit.sha512 - name: Calculate SHA256 checksum - run: sha256sum target/release/libreddit > libreddit.sha256 + run: sha256sum target/x86_64-unknown-linux-gnu/release/libreddit > libreddit.sha256 - uses: actions/upload-artifact@v3 name: Upload a Build Artifact with: name: libreddit path: | - target/release/libreddit + target/x86_64-unknown-linux-gnu/release/libreddit libreddit.sha512 libreddit.sha256 @@ -68,7 +68,7 @@ jobs: name: ${{ steps.version.outputs.VERSION }} - ${{ github.event.head_commit.message }} draft: true files: | - target/release/libreddit + target/x86_64-unknown-linux-gnu/release/libreddit libreddit.sha512 libreddit.sha256 body: | From 96e9e0ea9f45fa54bb6c0cbf9dd86a79dca9bd5c Mon Sep 17 00:00:00 2001 From: Matthew Esposito Date: Sat, 3 Jun 2023 19:36:39 -0400 Subject: [PATCH 12/12] Update .replit to download from nightly build artifacts (#815) --- .replit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.replit b/.replit index 164ef4f..0b7966c 100644 --- a/.replit +++ b/.replit @@ -1,2 +1,2 @@ -run = "while :; do set -ex; curl -o./libreddit -fsSL -- https://github.com/libreddit/libreddit/releases/latest/download/libreddit ; chmod +x libreddit; set +e; ./libreddit -H 63115200; sleep 1; done" +run = "while :; do set -ex; nix-env -iA nixpkgs.unzip; curl -o./libreddit.zip -fsSL -- https://nightly.link/libreddit/libreddit/workflows/main-rust/master/libreddit.zip; unzip -n libreddit.zip; mv target/x86_64-unknown-linux-gnu/release/libreddit .; chmod +x libreddit; set +e; ./libreddit -H 63115200; sleep 1; done" language = "bash"