Skip to content
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
23 changes: 21 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,8 +33,27 @@ 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_128_GCM_SHA256,
rustls::cipher_suite::TLS13_AES_256_GCM_SHA384,
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_http1()
.enable_http2()
.wrap_connector(proxy_connector)
});
Expand Down