diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 83f7742..725d5b1 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -1,13 +1,11 @@ name: CD # Continuous Deployment permissions: contents: write - on: push: tags: - '[v]?[0-9]+.[0-9]+.[0-9]+' workflow_dispatch: - jobs: create-release: name: Create a release @@ -19,7 +17,6 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Generate a changelog uses: orhun/git-cliff-action@v4 with: @@ -27,23 +24,17 @@ jobs: args: --latest --strip header env: OUTPUT: BODY.md - - name: Publish on GitHub uses: ncipollo/release-action@v1 with: prerelease: false bodyFile: BODY.md - - publish-release: - name: Publishing for ${{ matrix.os }} runs-on: ${{ matrix.os }} - strategy: matrix: include: - # macos x86_64 - os: macos-latest os-name: macos target: x86_64-apple-darwin @@ -51,7 +42,6 @@ jobs: binary-postfix: "" binary-name: tv use-cross: false - # macos arm64 - os: macos-latest os-name: macos target: aarch64-apple-darwin @@ -59,31 +49,6 @@ jobs: binary-postfix: "" use-cross: false binary-name: tv - # windows x86_64 - - os: windows-latest - os-name: windows - target: x86_64-pc-windows-msvc - architecture: x86_64 - binary-postfix: ".exe" - use-cross: false - binary-name: tv - # linux aaarch64 - - os: ubuntu-latest - os-name: linux - target: aarch64-unknown-linux-gnu - architecture: arm64 - binary-postfix: "" - use-cross: true - binary-name: tv - # linux i686 - - os: ubuntu-latest - os-name: linux - target: i686-unknown-linux-gnu - architecture: i686 - binary-postfix: "" - use-cross: true - binary-name: tv - # linux x86_64 - os: ubuntu-latest os-name: linux target: x86_64-unknown-linux-gnu @@ -91,7 +56,27 @@ jobs: binary-postfix: "" use-cross: false binary-name: tv - + - os: windows-latest + os-name: windows + target: x86_64-pc-windows-msvc + architecture: x86_64 + binary-postfix: ".exe" + use-cross: false + binary-name: tv + - os: ubuntu-latest + os-name: linux + target: aarch64-unknown-linux-gnu + architecture: arm64 + binary-postfix: "" + use-cross: true + binary-name: tv + - os: ubuntu-latest + os-name: linux + target: i686-unknown-linux-gnu + architecture: i686 + binary-postfix: "" + use-cross: true + binary-name: tv steps: - name: Checkout repository uses: actions/checkout@v4 @@ -102,7 +87,6 @@ jobs: target: ${{ matrix.target }} profile: minimal override: true - - uses: Swatinem/rust-cache@v2 - name: Cargo build uses: actions-rs/cargo@v1 @@ -111,24 +95,26 @@ jobs: use-cross: ${{ matrix.use-cross }} toolchain: stable args: --release --target ${{ matrix.target }} - - name: install strip command shell: bash - run: | + run: |2 if [[ ${{ matrix.target }} == aarch64-unknown-linux-gnu ]]; then + sudo apt update sudo apt-get install -y binutils-aarch64-linux-gnu fi - name: Packaging final binary shell: bash - run: | + run: |2 cd target/${{ matrix.target }}/release + ####### reduce binary size by removing debug symbols ####### BINARY_NAME=${{ matrix.binary-name }}${{ matrix.binary-postfix }} echo "BINARY_NAME=$BINARY_NAME" >> "$GITHUB_ENV" if [[ ${{ matrix.target }} == aarch64-unknown-linux-gnu ]]; then + GCC_PREFIX="aarch64-linux-gnu-" else GCC_PREFIX="" @@ -145,6 +131,7 @@ jobs: ########## create sha256 ########## if [[ ${{ runner.os }} == 'Windows' ]]; then + certutil -hashfile $RELEASE_NAME.tar.gz sha256 | grep -E [A-Fa-f0-9]{64} > $RELEASE_NAME.sha256 else shasum -a 256 $RELEASE_NAME.tar.gz > $RELEASE_NAME.sha256 @@ -155,71 +142,22 @@ jobs: run: | Compress-Archive -Path "$env:BINARY_NAME" -Destination "$($env:RELEASE_NAME).zip" (Get-FileHash "$($env:RELEASE_NAME).zip" -Algorithm SHA256).Hash.ToLower() > "$($env:RELEASE_NAME).zip.sha256" - - name: Releasing assets uses: softprops/action-gh-release@v2 with: files: | - target/${{ matrix.target }}/release/${{ matrix.binary-name }}-*.tar.gz target/${{ matrix.target }}/release/${{ matrix.binary-name }}-*.zip target/${{ matrix.target }}/release/${{ matrix.binary-name }}-*.sha256 - - env: - - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - # (for older glibc compatibility: https://github.com/alexpasmantier/television/issues/339) - publish-release-legacy-linux: - name: Publishing for Legacy Linux - runs-on: ubuntu-latest - container: centos:7 - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Install dependencies - run: | - yum -y update - yum -y groupinstall "Development Tools" - yum -y install gcc-c++ glibc-devel glibc-static - - - name: Install Rust toolchain - run: | - curl https://sh.rustup.rs -sSf | sh -s -- -y - source $HOME/.cargo/env - rustup target add x86_64-unknown-linux-gnu - - - name: Cargo build - run: | - cargo build --release --target x86_64-unknown-linux-gnu - - - name: Packaging final binary - run: | - cd target/x86_64-unknown-linux-gnu/release - tar czvf tv-legacy-linux.tar.gz tv - - - name: Releasing assets - uses: softprops/action-gh-release@v2 - with: - files: | - target/x86_64-unknown-linux-gnu/release/tv-legacy-linux.tar.gz env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - publish-release-deb: name: publish-release-deb for ${{ matrix.target }} runs-on: ubuntu-latest - strategy: matrix: include: - target: x86_64-unknown-linux-musl - - target: armv7-unknown-linux-musleabihf - - env: TARGET: ${{ matrix.target }} # Emit backtraces on panics. @@ -227,67 +165,51 @@ jobs: # Since we're distributing the dpkg, we don't know whether the user will # have PCRE2 installed, so just do a static build. PCRE2_SYS_STATIC: 1 - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Install packages (Ubuntu) - shell: bash - run: | - if ! command -V sudo; then - apt-get update - apt-get install -y --no-install-recommends sudo - fi - sudo apt-get update - sudo apt-get install -y --no-install-recommends \ - zsh xz-utils liblz4-tool musl-tools brotli zstd - - - name: Install Rust - uses: dtolnay/rust-toolchain@master - with: - toolchain: nightly - target: ${{ env.TARGET }} - - # for some reason, the above action doesn't seem to set the target correctly - - name: Add rustup target - shell: bash - run: | - rustup target add ${{ env.TARGET }} - - - name: Install cargo-deb - shell: bash - run: | - cargo install cargo-deb - - - name: Create deployment directory - shell: bash - run: | - dir=deployment/deb - mkdir -p "$dir" - echo "DEPLOY_DIR=$dir" >> $GITHUB_ENV - - - name: Build release binary - shell: bash - run: | - cargo deb --profile deb --target ${{ env.TARGET }} - version="${{ github.ref_name }}" - echo "DEB_DIR=target/${{ env.TARGET }}/debian" >> $GITHUB_ENV - echo "DEB_NAME=television_$version-1_${{ env.TARGET }}.deb" >> $GITHUB_ENV - - - name: Create sha256 sum of deb file - shell: bash - run: | - cd "$DEB_DIR" - sum="$DEB_NAME.sha256" - shasum -a 256 "$DEB_NAME" > "$sum" - echo "SUM=$sum" >> $GITHUB_ENV - - - name: Upload release archive - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - shell: bash - run: | - cd "$DEB_DIR" - version="${{ github.ref_name }}" - gh release upload "$version" "$DEB_NAME" "$SUM" + - name: Checkout repository + uses: actions/checkout@v4 + - name: Install packages (Ubuntu) + shell: bash + run: "if ! command -V sudo; then\n apt-get update\n apt-get install -y --no-install-recommends sudo\nfi\nsudo apt-get update\nsudo apt-get install -y --no-install-recommends \\\n zsh xz-utils liblz4-tool musl-tools brotli zstd \n" + - name: Install Rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: nightly + target: ${{ env.TARGET }} + # for some reason, the above action doesn't seem to set the target correctly + - name: Add rustup target + shell: bash + run: | + rustup target add ${{ env.TARGET }} + - name: Install cargo-deb + shell: bash + run: | + cargo install cargo-deb + - name: Create deployment directory + shell: bash + run: | + dir=deployment/deb + mkdir -p "$dir" + echo "DEPLOY_DIR=$dir" >> $GITHUB_ENV + - name: Build release binary + shell: bash + run: | + cargo deb --profile deb --target ${{ env.TARGET }} + version="${{ github.ref_name }}" + echo "DEB_DIR=target/${{ env.TARGET }}/debian" >> $GITHUB_ENV + echo "DEB_NAME=television_$version-1_${{ env.TARGET }}.deb" >> $GITHUB_ENV + - name: Create sha256 sum of deb file + shell: bash + run: | + cd "$DEB_DIR" + sum="$DEB_NAME.sha256" + shasum -a 256 "$DEB_NAME" > "$sum" + echo "SUM=$sum" >> $GITHUB_ENV + - name: Upload release archive + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + shell: bash + run: | + cd "$DEB_DIR" + version="${{ github.ref_name }}" + gh release upload "$version" "$DEB_NAME" "$SUM"