Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
224 changes: 224 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,224 @@
name: Build binary

on:
workflow_dispatch
#schedule:
# - cron: '5 5 * * *'

permissions:
contents: write

env:
CARGO_TERM_COLOR: always
REDLIB_ROOT_DIR: /tmp/redlib
APT: sudo apt -y -qq -o=Dpkg::Use-Pty=0

defaults:
run:
shell: bash

jobs:
get_prebuilt_last_tag:
runs-on: ubuntu-latest
outputs:
REDLIB_PREBUILT_LATEST_TAG: ${{ steps.release_latest_tag.outputs.REDLIB_PREBUILT_LATEST_TAG }}

steps:
- name: Get latest release tag of this repo
id: release_latest_tag
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
cd /tmp/
REDLIB_PREBUILT_LATEST_TAG=$(gh release list -R mycodedoesnotcompile2/redlib_fork --json tagName -L 1 --jq '.[].tagName' --exclude-drafts --exclude-pre-releases)
echo "REDLIB_PREBUILT_LATEST_TAG=$REDLIB_PREBUILT_LATEST_TAG" >> $GITHUB_OUTPUT

build:
needs: get_prebuilt_last_tag
strategy:
fail-fast: false
matrix:
include:
- TARGET: x86_64-unknown-linux-gnu
OS: ubuntu-latest

- TARGET: x86_64-unknown-linux-musl
OS: ubuntu-latest

- TARGET: aarch64-unknown-linux-gnu
OS: ubuntu-24.04-arm

- TARGET: aarch64-unknown-linux-musl
OS: ubuntu-24.04-arm

- TARGET: armv7-unknown-linux-gnueabihf
OS: ubuntu-latest

# - TARGET: armv7-unknown-linux-musleabihf
# OS: ubuntu-latest
# CONTAINER: ghcr.io/rust-cross/rust-musl-cross:armv7-musleabihf

- TARGET: arm-unknown-linux-gnueabihf
OS: ubuntu-latest

#- TARGET: arm-unknown-linux-musleabihf
# OS: ubuntu-latest

# - TARGET: x86_64-apple-darwin
# OS: macos-latest

# - TARGET: x86_64-pc-windows-msvc
# OS: windows-latest

runs-on: ${{ matrix.OS }}
container:
image: ${{ matrix.CONTAINER }}

env:
TARGET: ${{ matrix.TARGET }}
OS: ${{ matrix.OS }}
CONTAINER: ${{ matrix.CONTAINER }}

REDLIB_PREBUILT_LATEST_TAG: ${{ needs.get_prebuilt_last_tag.outputs.REDLIB_PREBUILT_LATEST_TAG }}

outputs:
REDLIB_CURRENT_COMMIT_ID: ${{ steps.release_commit_id.outputs.REDLIB_CURRENT_COMMIT_ID }}
REDLIB_VERSION: ${{ steps.release_version.outputs.REDLIB_VERSION }}

steps:
- name: Clone redlib repo and check if there is a new and uncompiled yet version
id: release_commit_id
run: |
cd /tmp/
git clone 'https://github.com/mycodedoesnotcompile2/redlib_fork.git' redlib
ls -alh .

cd $REDLIB_ROOT_DIR

REDLIB_CURRENT_COMMIT_ID=$(git rev-parse --short HEAD)
echo "REDLIB_CURRENT_COMMIT_ID=$REDLIB_CURRENT_COMMIT_ID" >> $GITHUB_ENV
echo "REDLIB_CURRENT_COMMIT_ID=$REDLIB_CURRENT_COMMIT_ID" >> $GITHUB_OUTPUT

# case: no new commit => abort the workflow
if [[ $REDLIB_PREBUILT_LATEST_TAG == $REDLIB_CURRENT_COMMIT_ID ]]; then
echo "[!] No new version to compile"
exit 100
fi

- name: Get redlib version
id: release_version_cargo_get
uses: nicolaiunrein/cargo-get@master
with:
subcommand: package.version
options: --entry "$REDLIB_ROOT_DIR/Cargo.toml"

- name: Set REDLIB_VERSION env var
id: release_version
run: |
REDLIB_VERSION=${{ steps.release_version_cargo_get.outputs.metadata }}
echo "REDLIB_VERSION=$REDLIB_VERSION" >> $GITHUB_ENV
echo "REDLIB_VERSION=$REDLIB_VERSION" >> $GITHUB_OUTPUT

- name: Install and configure dependencies
run: |
if [[ $OS =~ ^ubuntu.*$ ]]; then
$APT update
$APT install crossbuild-essential-armhf
fi

# for musl builds
if [[ $TARGET == *"-musl"* ]]; then
$APT install musl-tools
fi

# for arm targets
if [[ $TARGET == "arm"* ]]; then
cd "$REDLIB_ROOT_DIR"
cargo install --force --locked bindgen-cli
fi

# some additional configuration for cross-compilation on linux
cat >>~/.cargo/config.toml <<EOF
[target.armv7-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"
[target.armv7-unknown-linux-musleabihf]
linker = "arm-linux-gnueabihf-gcc"
[target.arm-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"
[target.arm-unknown-linux-musleabihf]
linker = "arm-linux-gnueabihf-gcc"
EOF


- name: Install rust target
run: rustup target add $TARGET


- name: Run build
run: |
cd $REDLIB_ROOT_DIR
cargo build --release --target $TARGET

- name: List build information
run: |
OLD_REDLIB_BIN_PATH="$REDLIB_ROOT_DIR/target/$TARGET/release/redlib"
REDLIB_BIN_PATH="$REDLIB_ROOT_DIR-$REDLIB_VERSION-wproxy-$TARGET"
REDLIB_BIN_HASH_PATH="$REDLIB_BIN_PATH.sha256.txt"

cp -f "$OLD_REDLIB_BIN_PATH" "$REDLIB_BIN_PATH"
ls -alh "$REDLIB_BIN_PATH"

cd "$(dirname "$REDLIB_BIN_PATH")"
sha256sum --tag "$(basename "$REDLIB_BIN_PATH")" | tee "$REDLIB_BIN_HASH_PATH"

echo "REDLIB_BIN_PATH=$REDLIB_BIN_PATH" >> $GITHUB_ENV
echo "REDLIB_BIN_HASH_PATH=$REDLIB_BIN_HASH_PATH" >> $GITHUB_ENV


- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: binary-${{ matrix.TARGET }}
path: |
${{ env.REDLIB_BIN_PATH }}
${{ env.REDLIB_BIN_HASH_PATH }}


deploy_release:
needs: build
runs-on: ubuntu-latest
env:
REDLIB_CURRENT_COMMIT_ID: ${{ needs.build.outputs.REDLIB_CURRENT_COMMIT_ID }}
REDLIB_VERSION: ${{ needs.build.outputs.REDLIB_VERSION }}

steps:
- name: Download Artifact
uses: actions/download-artifact@v4
with:
pattern: binary-*
merge-multiple: true
path: /tmp/results

- name: List target
run: |
cd "/tmp/results"
ls -alh

RELEASE_NOTES="/tmp/release_notes.txt"
echo "RELEASE_NOTES=$RELEASE_NOTES" >> $GITHUB_ENV

cat *.sha256.txt > "$RELEASE_NOTES"
sha256sum -c *.sha256.txt

mkdir -p "/tmp/hashes"
mv -f *.sha256.txt "/tmp/hashes/"

- name: Create a new Github release
uses: softprops/action-gh-release@72f2c25fcb47643c292f7107632f7a47c1df5cd8 #v2.3.2
with:
make_latest: true
body_path: ${{ env.RELEASE_NOTES }}
name: version ${{ env.REDLIB_VERSION }} - build ${{ env.REDLIB_CURRENT_COMMIT_ID }}
tag_name: ${{ env.REDLIB_CURRENT_COMMIT_ID }}
files: |
/tmp/results/redlib-*
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ base2048 = "2.0.2"
revision = "0.10.0"
tokio-socks = "0.5.2"
fake_user_agent = "0.2.2"
rustls = "0.21.12"

[dev-dependencies]
lipsum = "0.9.0"
Expand Down
22 changes: 20 additions & 2 deletions src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use futures_lite::future::block_on;
use futures_lite::{future::Boxed, FutureExt};
use hyper::header::HeaderValue;
use hyper::{body, body::Buf, header, Body, Client, Method, Request, Response, Uri};
use hyper_rustls::HttpsConnector;
use hyper_rustls::{ConfigBuilderExt, HttpsConnector};
use libflate::gzip;
use log::{error, trace, warn};
use percent_encoding::{percent_encode, CONTROLS};
Expand Down Expand Up @@ -33,7 +33,25 @@ const ALTERNATIVE_REDDIT_URL_BASE_HOST: &str = "www.reddit.com";
pub static HTTPS_CONNECTOR: LazyLock<HttpsConnector<ProxyConnector>> = LazyLock::new(|| {
let proxy_connector = ProxyConnector::new();
hyper_rustls::HttpsConnectorBuilder::new()
.with_native_roots()
.with_tls_config(
rustls::ClientConfig::builder()
.with_cipher_suites(&[
rustls::cipher_suite::TLS13_AES_256_GCM_SHA384,
rustls::cipher_suite::TLS13_AES_128_GCM_SHA256,
rustls::cipher_suite::TLS13_CHACHA20_POLY1305_SHA256,
rustls::cipher_suite::TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
rustls::cipher_suite::TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
rustls::cipher_suite::TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
rustls::cipher_suite::TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
rustls::cipher_suite::TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
rustls::cipher_suite::TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
])
.with_safe_default_kx_groups()
.with_safe_default_protocol_versions()
.unwrap()
.with_native_roots()
.with_no_client_auth(),
)
.https_only()
.enable_http2()
.wrap_connector(proxy_connector)
Expand Down