From 0d01177d7ef62630c5c70e72410a39b8c0157008 Mon Sep 17 00:00:00 2001 From: PeterDing Date: Fri, 15 Dec 2023 12:33:47 +0800 Subject: [PATCH] Version 0.5.0 --- .github/workflows/release.yml | 232 ++++++++++++++++++---------------- CHANGELOG.md | 12 ++ Cargo.toml | 14 +- ci/before_install.bash | 20 +-- 4 files changed, 153 insertions(+), 125 deletions(-) mode change 100644 => 100755 ci/before_install.bash diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d9cc313..0d01779 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,59 +1,43 @@ -# The way this works is the following: -# -# The create-release job runs purely to initialize the GitHub release itself -# and to output upload_url for the following job. -# -# The build-release job runs only once create-release is finished. It gets the -# release upload URL from create-release job outputs, then builds the release -# executables for each supported platform and attaches them as release assets -# to the previously created release. -# -# The key here is that we create the release only once. -# -# Reference: -# https://eugene-babichenko.github.io/blog/2020/05/09/github-actions-cross-platform-auto-releases/ - -name: release +name: Release + +# Only do the release on x.y.z tags. on: push: - # Enable when testing release infrastructure on a branch. - # branches: - # - ag/work tags: - "[0-9]+.[0-9]+.[0-9]+" -env: - CARGO_TERM_COLOR: always +# We need this to be able to create releases. +permissions: + contents: write jobs: + # The create-release job runs purely to initialize the GitHub release itself, + # and names the release after the `x.y.z` tag that was pushed. It's separate + # from building the release so that we only create the release once. create-release: name: create-release runs-on: ubuntu-latest - # env: - # Set to force version number, e.g., when no tag exists. - # AG_VERSION: TEST-0.0.0 - outputs: - upload_url: ${{ steps.release.outputs.upload_url }} - ag_version: ${{ env.AG_VERSION }} steps: + - uses: actions/checkout@v4 - name: Get the release version from the tag + if: env.VERSION == '' + run: echo "VERSION=${{ github.ref_name }}" >> $GITHUB_ENV + - name: Show the version + run: | + echo "version is: $VERSION" + - name: Check that tag version and Cargo.toml version are the same shell: bash - if: env.AG_VERSION == '' run: | - # Apparently, this is the right way to get a tag name. Really? - # - # See: https://github.community/t5/GitHub-Actions/How-to-get-just-the-tag-name/m-p/32167/highlight/true#M1027 - echo "AG_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV - echo "version is: ${{ env.AG_VERSION }}" - + if ! grep -q "version = \"$VERSION\"" Cargo.toml; then + echo "version does not match Cargo.toml" >&2 + exit 1 + fi - name: Create GitHub release - id: release - uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ env.AG_VERSION }} - release_name: ${{ env.AG_VERSION }} + run: gh release create $VERSION --draft --verify-tag --title $VERSION + outputs: + version: ${{ env.VERSION }} build-release: name: build-release @@ -64,128 +48,160 @@ jobs: # systems. CARGO: cargo # When CARGO is set to CROSS, this is set to `--target matrix.target`. - TARGET_FLAGS: "" + TARGET_FLAGS: # When CARGO is set to CROSS, TARGET_DIR includes matrix.target. TARGET_DIR: ./target + # Bump this as appropriate. We pin to a version to make sure CI + # continues to work as cross releases in the past have broken things + # in subtle ways. + CROSS_VERSION: v0.2.5 # Emit backtraces on panics. RUST_BACKTRACE: 1 strategy: + fail-fast: false matrix: - build: [linux, linux-arm, linux-aarch64, macos, macos-aarch64, win-msvc, win-gnu, win32-msvc] include: - build: linux - os: ubuntu-18.04 + os: ubuntu-latest rust: nightly target: x86_64-unknown-linux-musl - - build: linux-arm - os: ubuntu-18.04 - rust: nightly - target: arm-unknown-linux-gnueabihf - - build: linux-aarch64 - os: ubuntu-18.04 - rust: nightly + strip: x86_64-linux-musl-strip + - build: stable-aarch64 + os: ubuntu-latest + rust: stable target: aarch64-unknown-linux-gnu + strip: aarch64-linux-gnu-strip + qemu: qemu-aarch64 + - build: stable-powerpc64 + os: ubuntu-latest + rust: stable + target: powerpc64-unknown-linux-gnu + strip: powerpc64-linux-gnu-strip + qemu: qemu-ppc64 + - build: stable-s390x + os: ubuntu-latest + rust: stable + target: s390x-unknown-linux-gnu + strip: s390x-linux-gnu-strip + qemu: qemu-s390x - build: macos os: macos-latest rust: nightly target: x86_64-apple-darwin - - build: macos-aarch64 - os: macos-latest - rust: nightly - target: aarch64-apple-darwin - build: win-msvc - os: windows-2019 + os: windows-latest rust: nightly target: x86_64-pc-windows-msvc - build: win-gnu - os: windows-2019 + os: windows-latest rust: nightly-x86_64-gnu target: x86_64-pc-windows-gnu - - build: win32-msvc - os: windows-2019 - rust: nightly - target: i686-pc-windows-msvc steps: - name: Checkout repository - uses: actions/checkout@v2 - with: - fetch-depth: 1 + uses: actions/checkout@v4 + + - name: Install packages (Ubuntu) + if: matrix.os == 'ubuntu-latest' + shell: bash + run: | + ci/before_install.bash - name: Install Rust - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.rust }} - profile: minimal - override: true target: ${{ matrix.target }} - - uses: Swatinem/rust-cache@v1 - - name: Use Cross + if: matrix.os == 'ubuntu-latest' && matrix.target != '' shell: bash run: | - cargo install cross + # In the past, new releases of 'cross' have broken CI. So for now, we + # pin it. We also use their pre-compiled binary releases because cross + # has over 100 dependencies and takes a bit to compile. + dir="$RUNNER_TEMP/cross-download" + mkdir "$dir" + echo "$dir" >> $GITHUB_PATH + cd "$dir" + curl -LO "https://github.com/cross-rs/cross/releases/download/$CROSS_VERSION/cross-x86_64-unknown-linux-musl.tar.gz" + tar xf cross-x86_64-unknown-linux-musl.tar.gz echo "CARGO=cross" >> $GITHUB_ENV + + - name: Set target variables + shell: bash + run: | echo "TARGET_FLAGS=--target ${{ matrix.target }}" >> $GITHUB_ENV echo "TARGET_DIR=./target/${{ matrix.target }}" >> $GITHUB_ENV - name: Show command used for Cargo + shell: bash run: | echo "cargo command is: ${{ env.CARGO }}" echo "target flag is: ${{ env.TARGET_FLAGS }}" echo "target dir is: ${{ env.TARGET_DIR }}" - - name: Build aarch64-unknown-linux-gnu - if: matrix.build == 'linux-aarch64' - run: | - rustup target add aarch64-unknown-linux-gnu - sudo apt-get update - sudo apt-get install -yq gcc-aarch64-linux-gnu - export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=/usr/bin/aarch64-linux-gnu-gcc - cargo build --verbose --release ${{ env.TARGET_FLAGS }} - echo "- Strip release binary (linux-aarch64)" - aarch64-linux-gnu-strip "target/${{ matrix.target }}/release/ag" - - name: Build release binary - if: matrix.build != 'linux-aarch64' - run: ${{ env.CARGO }} build --verbose --release ${{ env.TARGET_FLAGS }} + shell: bash + run: | + ${{ env.CARGO }} build --verbose --release ${{ env.TARGET_FLAGS }} + if [ "${{ matrix.os }}" = "windows-latest" ]; then + bin="target/${{ matrix.target }}/release/ag.exe" + else + bin="target/${{ matrix.target }}/release/ag" + fi + echo "BIN=$bin" >> $GITHUB_ENV - - name: Strip release binary (linux and macos) - if: matrix.build == 'linux' || matrix.build == 'macos' || matrix.build == 'macos-aarch64' - run: strip "target/${{ matrix.target }}/release/ag" + - name: Strip release binary (macos) + if: matrix.os == 'macos-latest' + shell: bash + run: strip "$BIN" - - name: Strip release binary (arm) - if: matrix.build == 'linux-arm' + - name: Strip release binary (cross) + if: env.CARGO == 'cross' + shell: bash run: | docker run --rm -v \ "$PWD/target:/target:Z" \ - rustembedded/cross:arm-unknown-linux-gnueabihf \ - arm-linux-gnueabihf-strip \ - /target/arm-unknown-linux-gnueabihf/release/ag + "rustembedded/cross:${{ matrix.target }}" \ + "${{ matrix.strip }}" \ + "/target/${{ matrix.target }}/release/ag" - - name: Build archive + - name: Determine archive name shell: bash run: | - staging="aget-rs-${{ needs.create-release.outputs.ag_version }}-${{ matrix.target }}" - mkdir -p "$staging" - cp {README.md,LICENSE-APACHE,LICENSE-MIT,CHANGELOG.md} "$staging/" - if [ "${{ matrix.os }}" = "windows-2019" ]; then - cp "target/${{ matrix.target }}/release/ag.exe" "$staging/" - 7z a "$staging.zip" "$staging" - echo "ASSET=$staging.zip" >> $GITHUB_ENV - else - cp "target/${{ matrix.target }}/release/ag" "$staging/" - tar czf "$staging.tar.gz" "$staging" - echo "ASSET=$staging.tar.gz" >> $GITHUB_ENV - fi + version="${{ needs.create-release.outputs.version }}" + echo "ARCHIVE=aget-rs-$version-${{ matrix.target }}" >> $GITHUB_ENV + + - name: Creating directory for archive + shell: bash + run: | + mkdir -p "$ARCHIVE"/ + cp "$BIN" "$ARCHIVE"/ + cp {README.md,LICENSE-APACHE,LICENSE-MIT} "$ARCHIVE"/ + + - name: Build archive (Windows) + shell: bash + if: matrix.os == 'windows-latest' + run: | + 7z a "$ARCHIVE.zip" "$ARCHIVE" + certutil -hashfile "$ARCHIVE.zip" SHA256 > "$ARCHIVE.zip.sha256" + echo "ASSET=$ARCHIVE.zip" >> $GITHUB_ENV + echo "ASSET_SUM=$ARCHIVE.zip.sha256" >> $GITHUB_ENV + + - name: Build archive (Unix) + shell: bash + if: matrix.os != 'windows-latest' + run: | + tar czf "$ARCHIVE.tar.gz" "$ARCHIVE" + shasum -a 256 "$ARCHIVE.tar.gz" > "$ARCHIVE.tar.gz.sha256" + echo "ASSET=$ARCHIVE.tar.gz" >> $GITHUB_ENV + echo "ASSET_SUM=$ARCHIVE.tar.gz.sha256" >> $GITHUB_ENV - name: Upload release archive - uses: actions/upload-release-asset@v1.0.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ needs.create-release.outputs.upload_url }} - asset_path: ${{ env.ASSET }} - asset_name: ${{ env.ASSET }} - asset_content_type: application/octet-stream + shell: bash + run: | + version="${{ needs.create-release.outputs.version }}" + gh release upload "$version" ${{ env.ASSET }} ${{ env.ASSET_SUM }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 05189f8..1255afe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## 0.5.0 - 2023-12-15 + +### Changed + +- Use `reqwest` to instead of `awc` + +### Updated + +- Support proxy + + Use `--proxy` option or set global proxy environment variables + ## 0.4.1 - 2022-04-20 ### Added diff --git a/Cargo.toml b/Cargo.toml index ee0ad67..a0c9246 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aget-rs" -version = "0.4.1" +version = "0.5.0" authors = ["PeterDing "] homepage = "https://github.com/PeterDing/aget-rs" description="Aget-rs - Fast Asynchronous Downloader with Rust 🦀" @@ -33,7 +33,7 @@ actix-rt = "2.9" # for http http = "1.0" url = "2.5" -reqwest = { version = "0.11", features = ["default", "stream", "gzip", "brotli", "deflate"] } +reqwest = { version = "0.11", features = ["rustls-tls", "stream", "gzip", "brotli", "deflate"], default-features = false } # for errors thiserror = "1.0" @@ -65,6 +65,12 @@ time = { version = "0.3", features = ["formatting", "macros"] } rand = "0.8" [profile.release] +opt-level = 3 +debug = "none" +strip = "symbols" +debug-assertions = false +overflow-checks = false +lto = "fat" +panic = "abort" +incremental = false codegen-units = 1 -lto = true -opt-level = 'z' diff --git a/ci/before_install.bash b/ci/before_install.bash old mode 100644 new mode 100755 index 8622381..5633908 --- a/ci/before_install.bash +++ b/ci/before_install.bash @@ -1,19 +1,13 @@ #!/usr/bin/env bash -set -ex - -echo "-: before_install.bash" - -if [[ $TRAVIS_OS_NAME != linux ]]; then - exit 0 +if ! command -V sudo; then + apt-get update + apt-get install -y --no-install-recommends sudo fi - -echo "-: sudo apt-get update" sudo apt-get update - -# needed for aget-rs -sudo apt-get install -y build-essential openssl libssl-dev pkg-config +sudo apt-get install -y --no-install-recommends \ + zsh xz-utils liblz4-tool musl-tools brotli zstd \ + build-essential openssl libssl-dev pkg-config # needed to build deb packages -echo "-: sudo apt-get install -y fakeroot" -sudo apt-get install -y fakeroot +sudo apt-get install -y --no-install-recommends fakeroot