diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index ae37c90..ca3e7ec 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -2,27 +2,40 @@ name: CI on: push: + branches: [main] pull_request: + branches: [main] env: CARGO_TERM_COLOR: always - RUST_BACKTRACE: short + RUST_BACKTRACE: "1" RUSTFLAGS: -D warnings jobs: fmt: name: cargo fmt --check runs-on: ubuntu-latest + timeout-minutes: 5 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@1.83 with: components: rustfmt + - uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-fmt-${{ hashFiles('**/Cargo.lock', '**/Cargo.toml') }} + restore-keys: | + ${{ runner.os }}-cargo-fmt- - run: cargo fmt --all -- --check clippy: name: cargo clippy runs-on: ubuntu-latest + timeout-minutes: 5 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@1.83 @@ -42,6 +55,7 @@ jobs: test: name: cargo test runs-on: ubuntu-latest + timeout-minutes: 5 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@1.83 @@ -76,13 +90,13 @@ jobs: key: ${{ runner.os }}-cargo-test-${{ hashFiles('**/Cargo.lock', '**/Cargo.toml') }} restore-keys: | ${{ runner.os }}-cargo-test- - - name: install Neovim 0.11 + Vim + - name: install Neovim + Vim run: | set -euo pipefail - # Apt's neovim is too old (Ubuntu LTS ships 0.6/0.7), missing - # `vim.lsp.get_clients` and rejecting `@group.modifier` - # highlight names. Pull the official static tarball instead. - NVIM_VER=v0.11.3 + # Test the minimum supported Neovim version (0.11.0) so we + # catch API regressions at the bottom of the supported range. + # Pinning to a specific patch version; bump when 0.12 ships. + NVIM_VER=v0.11.0 curl -fsSL -o /tmp/nvim.tar.gz \ "https://github.com/neovim/neovim/releases/download/${NVIM_VER}/nvim-linux-x86_64.tar.gz" sudo tar -xzf /tmp/nvim.tar.gz -C /opt diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml index f8a67cf..cafae48 100644 --- a/.gitea/workflows/release.yaml +++ b/.gitea/workflows/release.yaml @@ -11,6 +11,7 @@ permissions: env: CARGO_TERM_COLOR: always RUST_BACKTRACE: short + RUSTFLAGS: -D warnings jobs: build: @@ -22,19 +23,19 @@ jobs: include: - target: x86_64-unknown-linux-gnu apt: "" - rustflags: "" + rustflags: "-D warnings" - target: aarch64-unknown-linux-gnu # gcc-aarch64-linux-gnu ships the cross compiler/binutils # but no target libc; libc6-dev-arm64-cross adds Scrt1.o, # crti.o, and friends needed at link time. apt: "gcc-aarch64-linux-gnu libc6-dev-arm64-cross" - rustflags: "" + rustflags: "-D warnings" - target: x86_64-unknown-linux-musl apt: "musl-tools" - rustflags: "" + rustflags: "-D warnings" - target: aarch64-unknown-linux-musl apt: "" - rustflags: "-C linker=rust-lld -C link-self-contained=yes" + rustflags: "-D warnings -C linker=rust-lld -C link-self-contained=yes" steps: - uses: actions/checkout@v4 @@ -79,28 +80,24 @@ jobs: echo "archive=$archive" >> "$GITHUB_OUTPUT" - name: Upload build artifact - # Gitea Actions doesn't support upload-artifact v4 (uses a - # GitHub-only backend API); pin to v3. - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: nuwiki-ls-${{ matrix.target }} path: ${{ steps.package.outputs.archive }} if-no-files-found: error - retention-days: 7 release: name: gitea release needs: build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - name: Download all build artifacts - # Paired with upload-artifact@v3 above. v3 has no merge-multiple - # option and nests each artifact under its own subdirectory. - uses: actions/download-artifact@v3 + # upload-artifact@v4 + download-artifact@v4 with merge-multiple + # flattens all artifacts into the download path directly. + uses: actions/download-artifact@v4 with: path: ./artifacts + merge-multiple: true - name: Ensure jq + curl run: | @@ -111,6 +108,26 @@ jobs: apt-get update && apt-get install -y --no-install-recommends curl fi + - name: Generate release notes + id: notes + run: | + set -euo pipefail + # Get commits since the previous tag (or the first commit if this is the first release). + prev_tag=$(git tag --sort=-version:refname | awk "NR==2" || echo "") + if [ -n "$prev_tag" ]; then + log=$(git log --oneline "$prev_tag"..HEAD) + else + log=$(git log --oneline --max-parents=0..HEAD) + fi + # Write notes to a file for later use. + cat > release-notes.txt </), so recurse.