diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index c28a911b5f..50d5235981 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -2,13 +2,13 @@ name: CD on: push: - tags: - - '*' + tags: + - "*" workflow_dispatch: - + permissions: contents: write - + jobs: release: strategy: @@ -18,115 +18,117 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 - - - name: Get version - id: get_version - run: echo "version=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT - - - name: Restore cargo cache - uses: Swatinem/rust-cache@v2 - env: - cache-name: ci - with: - shared-key: ${{ matrix.os }}-${{ env.cache-name }}-stable - - - name: Install Rust - uses: dtolnay/rust-toolchain@stable - with: - components: clippy - - - name: Build - if: matrix.os != 'ubuntu-22.04' - env: - GITUI_RELEASE: 1 - run: cargo build - - name: Run tests - if: matrix.os != 'ubuntu-22.04' - run: make test - - name: Run clippy - if: matrix.os != 'ubuntu-22.04' - run: | - cargo clean - make clippy - - - name: Setup MUSL - if: matrix.os == 'ubuntu-latest' - run: | - rustup target add x86_64-unknown-linux-musl - sudo apt-get -qq install musl-tools - - - name: Setup ARM toolchain - if: matrix.os == 'ubuntu-22.04' - run: | - rustup target add aarch64-unknown-linux-gnu - rustup target add armv7-unknown-linux-gnueabihf - rustup target add arm-unknown-linux-gnueabihf - - curl -o $GITHUB_WORKSPACE/aarch64.tar.xz https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/8.2-2018.08/gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu.tar.xz - curl -o $GITHUB_WORKSPACE/arm.tar.xz https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/8.2-2018.08/gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf.tar.xz - - tar xf $GITHUB_WORKSPACE/aarch64.tar.xz - tar xf $GITHUB_WORKSPACE/arm.tar.xz - - echo "$GITHUB_WORKSPACE/gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu/bin" >> $GITHUB_PATH - echo "$GITHUB_WORKSPACE/gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf/bin" >> $GITHUB_PATH - - - name: Build Release Mac - if: matrix.os == 'macos-latest' - env: - GITUI_RELEASE: 1 - run: make release-mac - - name: Build Release Mac x86 - if: matrix.os == 'macos-latest' - env: - GITUI_RELEASE: 1 - run: | - rustup target add x86_64-apple-darwin - make release-mac-x86 - - name: Build Release Linux - if: matrix.os == 'ubuntu-latest' - env: - GITUI_RELEASE: 1 - run: make release-linux-musl - - name: Build Release Win - if: matrix.os == 'windows-latest' - env: - GITUI_RELEASE: 1 - run: make release-win - - name: Build Release Linux ARM - if: matrix.os == 'ubuntu-22.04' - env: - GITUI_RELEASE: 1 - run: make release-linux-arm - - - name: Set SHA - if: matrix.os == 'macos-latest' - id: shasum - run: | - echo sha="$(shasum -a 256 ./release/gitui-mac.tar.gz | awk '{printf $1}')" >> $GITHUB_OUTPUT - - - name: Extract release notes - if: matrix.os == 'ubuntu-latest' - id: release_notes - uses: ffurrer2/extract-release-notes@v2 - - - name: Release - uses: softprops/action-gh-release@v2 - with: - body: ${{ steps.release_notes.outputs.release_notes }} - prerelease: ${{ contains(github.ref, '-') }} - files: | - ./release/*.tar.gz - ./release/*.zip - ./release/*.msi - - - name: Bump homebrew-core formula - uses: mislav/bump-homebrew-formula-action@v3 - if: "matrix.os == 'macos-latest' && !contains(github.ref, '-')" # skip prereleases - env: - COMMITTER_TOKEN: ${{ secrets.BREW_TOKEN }} - with: - formula-name: gitui - # https://github.com/mislav/bump-homebrew-formula-action/issues/58 - formula-path: Formula/g/gitui.rb + - uses: actions/checkout@v4 + + - name: Get version + id: get_version + run: echo "version=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT + + - name: Restore cargo cache + uses: Swatinem/rust-cache@v2 + env: + cache-name: ci + with: + shared-key: ${{ matrix.os }}-${{ env.cache-name }}-stable + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + components: clippy + + - uses: taiki-e/install-action@nextest + + - name: Build + if: matrix.os != 'ubuntu-22.04' + env: + GITUI_RELEASE: 1 + run: cargo build + - name: Run tests + if: matrix.os != 'ubuntu-22.04' + run: make test + - name: Run clippy + if: matrix.os != 'ubuntu-22.04' + run: | + cargo clean + make clippy + + - name: Setup MUSL + if: matrix.os == 'ubuntu-latest' + run: | + rustup target add x86_64-unknown-linux-musl + sudo apt-get -qq install musl-tools + + - name: Setup ARM toolchain + if: matrix.os == 'ubuntu-22.04' + run: | + rustup target add aarch64-unknown-linux-gnu + rustup target add armv7-unknown-linux-gnueabihf + rustup target add arm-unknown-linux-gnueabihf + + curl -o $GITHUB_WORKSPACE/aarch64.tar.xz https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/8.2-2018.08/gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu.tar.xz + curl -o $GITHUB_WORKSPACE/arm.tar.xz https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/8.2-2018.08/gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf.tar.xz + + tar xf $GITHUB_WORKSPACE/aarch64.tar.xz + tar xf $GITHUB_WORKSPACE/arm.tar.xz + + echo "$GITHUB_WORKSPACE/gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu/bin" >> $GITHUB_PATH + echo "$GITHUB_WORKSPACE/gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf/bin" >> $GITHUB_PATH + + - name: Build Release Mac + if: matrix.os == 'macos-latest' + env: + GITUI_RELEASE: 1 + run: make release-mac + - name: Build Release Mac x86 + if: matrix.os == 'macos-latest' + env: + GITUI_RELEASE: 1 + run: | + rustup target add x86_64-apple-darwin + make release-mac-x86 + - name: Build Release Linux + if: matrix.os == 'ubuntu-latest' + env: + GITUI_RELEASE: 1 + run: make release-linux-musl + - name: Build Release Win + if: matrix.os == 'windows-latest' + env: + GITUI_RELEASE: 1 + run: make release-win + - name: Build Release Linux ARM + if: matrix.os == 'ubuntu-22.04' + env: + GITUI_RELEASE: 1 + run: make release-linux-arm + + - name: Set SHA + if: matrix.os == 'macos-latest' + id: shasum + run: | + echo sha="$(shasum -a 256 ./release/gitui-mac.tar.gz | awk '{printf $1}')" >> $GITHUB_OUTPUT + + - name: Extract release notes + if: matrix.os == 'ubuntu-latest' + id: release_notes + uses: ffurrer2/extract-release-notes@v2 + + - name: Release + uses: softprops/action-gh-release@v2 + with: + body: ${{ steps.release_notes.outputs.release_notes }} + prerelease: ${{ contains(github.ref, '-') }} + files: | + ./release/*.tar.gz + ./release/*.zip + ./release/*.msi + + - name: Bump homebrew-core formula + uses: mislav/bump-homebrew-formula-action@v3 + if: "matrix.os == 'macos-latest' && !contains(github.ref, '-')" # skip prereleases + env: + COMMITTER_TOKEN: ${{ secrets.BREW_TOKEN }} + with: + formula-name: gitui + # https://github.com/mislav/bump-homebrew-formula-action/issues/58 + formula-path: Formula/g/gitui.rb diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bd5b976915..e612935ee9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,6 +47,8 @@ jobs: - name: Rustup Show run: rustup show + - uses: taiki-e/install-action@nextest + - name: Build Debug run: | cargo build @@ -121,6 +123,8 @@ jobs: - name: Rustup Show run: rustup show + - uses: taiki-e/install-action@nextest + - name: Setup MUSL run: | sudo apt-get -qq install musl-tools diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 8946efa7a7..83080a59ed 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -2,7 +2,7 @@ name: Build Nightly Releases on: schedule: - - cron: '0 3 * * *' + - cron: "0 3 * * *" workflow_dispatch: env: @@ -14,112 +14,112 @@ jobs: strategy: fail-fast: false matrix: - os: [ - ubuntu-latest, macos-latest, windows-latest, ubuntu-22.04 - ] + os: [ubuntu-latest, macos-latest, windows-latest, ubuntu-22.04] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 - - - name: Restore cargo cache - uses: Swatinem/rust-cache@v2 - env: - cache-name: ci - with: - shared-key: ${{ matrix.os }}-${{ env.cache-name }}-stable - - - name: Install Rust - uses: dtolnay/rust-toolchain@stable - with: - components: clippy - - # ideally we trigger the nightly build/deploy only if the normal nightly CI finished successfully - - name: Run tests - if: matrix.os != 'ubuntu-22.04' - run: make test - - name: Run clippy - if: matrix.os != 'ubuntu-22.04' - run: | - cargo clean - make clippy - - - name: Setup MUSL - if: matrix.os == 'ubuntu-latest' - run: | - rustup target add x86_64-unknown-linux-musl - sudo apt-get -qq install musl-tools - - - name: Setup ARM toolchain - if: matrix.os == 'ubuntu-22.04' - run: | - rustup target add aarch64-unknown-linux-gnu - rustup target add armv7-unknown-linux-gnueabihf - rustup target add arm-unknown-linux-gnueabihf - - curl -o $GITHUB_WORKSPACE/aarch64.tar.xz https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/8.2-2018.08/gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu.tar.xz - curl -o $GITHUB_WORKSPACE/arm.tar.xz https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/8.2-2018.08/gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf.tar.xz - - tar xf $GITHUB_WORKSPACE/aarch64.tar.xz - tar xf $GITHUB_WORKSPACE/arm.tar.xz - - echo "$GITHUB_WORKSPACE/gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu/bin" >> $GITHUB_PATH - echo "$GITHUB_WORKSPACE/gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf/bin" >> $GITHUB_PATH - - - name: Build Release Mac - if: matrix.os == 'macos-latest' - run: make release-mac - - name: Build Release Mac x86 - if: matrix.os == 'macos-latest' - run: | - rustup target add x86_64-apple-darwin - make release-mac-x86 - - name: Build Release Linux - if: matrix.os == 'ubuntu-latest' - run: make release-linux-musl - - name: Build Release Win - if: matrix.os == 'windows-latest' - run: make release-win - - name: Build Release Linux ARM - if: matrix.os == 'ubuntu-22.04' - run: make release-linux-arm - - - name: Ubuntu 22.04 Upload Artifact - if: matrix.os == 'ubuntu-22.04' - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_KEY_SECRET }} - AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION }} - run: | - aws s3 cp ./release/gitui-linux-armv7.tar.gz $AWS_BUCKET_NAME - aws s3 cp ./release/gitui-linux-arm.tar.gz $AWS_BUCKET_NAME - aws s3 cp ./release/gitui-linux-aarch64.tar.gz $AWS_BUCKET_NAME - - - name: Ubuntu Latest Upload Artifact - if: matrix.os == 'ubuntu-latest' - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_KEY_SECRET }} - AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION }} - run: | - aws s3 cp ./release/gitui-linux-x86_64.tar.gz $AWS_BUCKET_NAME - - - name: MacOS Upload Artifact - if: matrix.os == 'macos-latest' - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_KEY_SECRET }} - AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION }} - run: | - aws s3 cp ./release/gitui-mac.tar.gz $AWS_BUCKET_NAME - aws s3 cp ./release/gitui-mac-x86.tar.gz $AWS_BUCKET_NAME - - - name: Windows Upload Artifact - if: matrix.os == 'windows-latest' - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_KEY_SECRET }} - AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION }} - run: | - aws s3 cp ./release/gitui-win.msi $env:AWS_BUCKET_NAME - aws s3 cp ./release/gitui-win.tar.gz $env:AWS_BUCKET_NAME + - uses: actions/checkout@v4 + + - name: Restore cargo cache + uses: Swatinem/rust-cache@v2 + env: + cache-name: ci + with: + shared-key: ${{ matrix.os }}-${{ env.cache-name }}-stable + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + components: clippy + + - uses: taiki-e/install-action@nextest + + # ideally we trigger the nightly build/deploy only if the normal nightly CI finished successfully + - name: Run tests + if: matrix.os != 'ubuntu-22.04' + run: make test + - name: Run clippy + if: matrix.os != 'ubuntu-22.04' + run: | + cargo clean + make clippy + + - name: Setup MUSL + if: matrix.os == 'ubuntu-latest' + run: | + rustup target add x86_64-unknown-linux-musl + sudo apt-get -qq install musl-tools + + - name: Setup ARM toolchain + if: matrix.os == 'ubuntu-22.04' + run: | + rustup target add aarch64-unknown-linux-gnu + rustup target add armv7-unknown-linux-gnueabihf + rustup target add arm-unknown-linux-gnueabihf + + curl -o $GITHUB_WORKSPACE/aarch64.tar.xz https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/8.2-2018.08/gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu.tar.xz + curl -o $GITHUB_WORKSPACE/arm.tar.xz https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/8.2-2018.08/gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf.tar.xz + + tar xf $GITHUB_WORKSPACE/aarch64.tar.xz + tar xf $GITHUB_WORKSPACE/arm.tar.xz + + echo "$GITHUB_WORKSPACE/gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu/bin" >> $GITHUB_PATH + echo "$GITHUB_WORKSPACE/gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf/bin" >> $GITHUB_PATH + + - name: Build Release Mac + if: matrix.os == 'macos-latest' + run: make release-mac + - name: Build Release Mac x86 + if: matrix.os == 'macos-latest' + run: | + rustup target add x86_64-apple-darwin + make release-mac-x86 + - name: Build Release Linux + if: matrix.os == 'ubuntu-latest' + run: make release-linux-musl + - name: Build Release Win + if: matrix.os == 'windows-latest' + run: make release-win + - name: Build Release Linux ARM + if: matrix.os == 'ubuntu-22.04' + run: make release-linux-arm + + - name: Ubuntu 22.04 Upload Artifact + if: matrix.os == 'ubuntu-22.04' + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_KEY_SECRET }} + AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION }} + run: | + aws s3 cp ./release/gitui-linux-armv7.tar.gz $AWS_BUCKET_NAME + aws s3 cp ./release/gitui-linux-arm.tar.gz $AWS_BUCKET_NAME + aws s3 cp ./release/gitui-linux-aarch64.tar.gz $AWS_BUCKET_NAME + + - name: Ubuntu Latest Upload Artifact + if: matrix.os == 'ubuntu-latest' + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_KEY_SECRET }} + AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION }} + run: | + aws s3 cp ./release/gitui-linux-x86_64.tar.gz $AWS_BUCKET_NAME + + - name: MacOS Upload Artifact + if: matrix.os == 'macos-latest' + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_KEY_SECRET }} + AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION }} + run: | + aws s3 cp ./release/gitui-mac.tar.gz $AWS_BUCKET_NAME + aws s3 cp ./release/gitui-mac-x86.tar.gz $AWS_BUCKET_NAME + + - name: Windows Upload Artifact + if: matrix.os == 'windows-latest' + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_KEY_SECRET }} + AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION }} + run: | + aws s3 cp ./release/gitui-win.msi $env:AWS_BUCKET_NAME + aws s3 cp ./release/gitui-win.tar.gz $env:AWS_BUCKET_NAME diff --git a/Makefile b/Makefile index 919c9aed8c..4b0c5496b1 100644 --- a/Makefile +++ b/Makefile @@ -59,7 +59,7 @@ build-linux-musl-release: cargo build --release --target=x86_64-unknown-linux-musl --locked test-linux-musl: - cargo test --workspace --target=x86_64-unknown-linux-musl + cargo nextest run --workspace --target=x86_64-unknown-linux-musl release-linux-arm: build-linux-arm-release mkdir -p release @@ -83,7 +83,7 @@ build-linux-arm-release: cargo build --release --target=arm-unknown-linux-gnueabihf --locked test: - cargo test --workspace + cargo nextest run --workspace fmt: cargo fmt -- --check @@ -94,7 +94,7 @@ clippy: clippy-nightly: cargo +nightly clippy --workspace --all-features -check: fmt clippy test sort +check: fmt clippy test sort deny check-nightly: cargo +nightly c diff --git a/deny.toml b/deny.toml index b8a4de30b3..bf993d40f8 100644 --- a/deny.toml +++ b/deny.toml @@ -20,7 +20,9 @@ ignore = [ # Crate paste is unmaintained. The dependency is already removed in # ratatui:master. Until a new release is available, ignore this in # order to pass CI. (https://github.com/gitui-org/gitui/issues/2554) - { id = "RUSTSEC-2024-0436", reason = "The paste dependency is already removed from ratatui." } + { id = "RUSTSEC-2024-0436", reason = "The paste dependency is already removed from ratatui." }, + # See https://github.com/trishume/syntect/issues/606 + { id = "RUSTSEC-2025-0141", reason = "Only brought in via syntect" }, ] [bans]