Skip to content

Improve error message for version intersection conflicts #1881

Improve error message for version intersection conflicts

Improve error message for version intersection conflicts #1881

Workflow file for this run

on:
push:
branches:
- main
paths:
- "**/*.rs"
- "**/Cargo.toml"
- Cargo.lock
pull_request:
paths:
- "**/*.rs"
- "**/Cargo.toml"
- Cargo.lock
- .github/workflows/ci.yml
name: ci·rs
concurrency:
group: ci/rs/${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- run: cargo fmt --all -- --check
clippy:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- run: cargo clippy --all-features
env:
RUSTFLAGS: "-D warnings"
test:
needs: fmt
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo test --all-features
env:
RUSTFLAGS: "-D warnings"
coverage-unit:
needs: fmt
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: taiki-e/install-action@v2
with:
tool: cargo-tarpaulin
- run: cargo tarpaulin -o lcov --output-dir coverage
- uses: coverallsapp/github-action@v2
with:
path-to-lcov: coverage/lcov.info
parallel: true
flag-name: ${{ matrix.os }}-unit
coverage-integration:
needs: fmt
strategy:
matrix:
os:
- ubuntu-latest
- macos-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: taiki-e/install-action@v2
with:
tool: rustfilt
- name: build
run: |
RUSTFLAGS="-C instrument-coverage" cargo build
echo "$PWD/target/debug" >> $GITHUB_PATH
# testing for installing multiple of the same thing at once is ok
- run: pkgx +gnome.org/libxml2 & pkgx +gnome.org/libxml2 & pkgx +gnome.org/libxml2
# ^^ KEEP FIRST, IT MUST INSTALL
- run: pkgx --help
- run: pkgx --version
- run: pkgx +git
- run: pkgx +git --json
- run: pkgx +git --json=v1
- run: pkgx +git --json=v2
- run: pkgx git --version
- run: pkgx git@latest --version
- run: pkgx --silent +git
- run: pkgx --quiet +git
- run: pkgx +git -- git --version # lib/utils.rs:find_program
- run: pkgx --shellcode || true
- run: pkgx -qq git --version
- run: pkgx -s git --version
- run: pkgx -j +git
- run: pkgx git\* --version # test star constraints are valid
- run: pkgx /usr/bin/awk --version
- run: pkgx +yarnpkg.com yarn --version
- run: pkgx +yarnpkg.com -- yarn --version
# coverage for conflict error messages
- run: "! pkgx yarn --version"
# coverage for display-name resolution
- run: pkgx -v +agg
# testing we correctly handle +pkg syntax for pkgs with no env
- run: pkgx +curl.se/ca-certs
- run: '! pkgx flubber-flubbles' # cmd not found machinery
- run: '! pkgx --sync flubber-flubbles' # cmd not found machinery separate if branch
# create a fork bomb, but since it’s via pkgx we prevent it
- run: |
echo '#!/bin/sh' > foo
echo 'pkgx -- /bin/sh "$0"' >> foo
chmod u+x foo
if ./foo; then
exit 1
fi
# check that we update the pantry for unknown programs
# this works by deleting the entry for git then forcing
# pkgx to update the db, then trying to get git again
- run: |
set -x
rm -rf ~/.pkgx
rm -rf ~/.local/share/pkgx/pantry/projects/git-scm.org
rm ~/.cache/pkgx/pantry.2.db
pkgx curl --version
test -f ~/.cache/pkgx/pantry.2.db
test ! -d ~/.local/share/pkgx/pantry/projects/git-scm.org
pkgx git --version
test -d ~/.local/share/pkgx/pantry/projects/git-scm.org
if: ${{ matrix.os == 'ubuntu-latest' }}
# ^^ only on one platform as wasteful otherwise
- run: |
pkgx -Q hyperfine
! test -d ~/.pkgx/crates.io/hyperfine
! pkgx -Q flubber-flubber
! pkgx -Qqq flubber-flubber
pkgx -Q
- run: if [ $(find ~/.pkgx -name .tmp\* -type d | wc -l) -gt 0 ]; then
exit 1;
fi
- name: --shebang test 1
run: |
echo "#!/usr/bin/env -S pkgx --shebang echo" > ./stub.sh
chmod +x stub.sh
test "$(./stub.sh hi)" = hi
- name: --shebang test 2
run: test $(pkgx -q! echo fail hi) = hi
- name: '@latest'
run: |
pkgx semverator eq $(pkgx krampus=0.2.0 --version) 0.2.0
pkgx semverator gt $(pkgx krampus@latest --version) 0.2.0
env:
XDG_DATA_HOME: ${{ github.workspace }}/.data
- name: PKGX_PANTRY_DIR
run: |
git clone https://github.com/pkgxdev/pantry
pkgx hyperfine --version
PKGX_PANTRY_DIR=pantry pkgx hyperfine --version
env:
PKGX_PANTRY_DIR: ${{ github.workspace }}/pantry
PKGX_DIR: ${{ github.workspace }}/pkgx
PKGX_DIST_URL: https://dist.pkgx.dev
- name: --chdir
run: |
d=$(realpath $(mktemp -d))
test $(pwd) != $d
test $(pkgx -C $d -- pwd) = $d
test $(pkgx --chdir $d -- pwd) = $d
- name: generate coverage
run: |
pkgx +llvm.org -- llvm-profdata merge -sparse $(find . -name default_\*.prof\*) -o default.profdata
pkgx +llvm.org -- llvm-cov export \
./target/debug/pkgx \
--format=lcov \
--ignore-filename-regex="$HOME/.cargo" \
--instr-profile=default.profdata \
-Xdemangler=rustfilt \
> lcov.info
- uses: coverallsapp/github-action@v2
with:
path-to-lcov: lcov.info
parallel: true
flag-name: ${{ matrix.os }}-integration
upload-coverage:
needs: [coverage-unit, coverage-integration]
runs-on: ubuntu-latest
steps:
- uses: coverallsapp/github-action@v2
with:
parallel-finished: true
test-minimal-container:
needs: fmt
runs-on: ubuntu-latest
container: debian:buster-slim
steps:
- uses: actions/checkout@v4
- run: apt-get update && apt-get install -y curl make gcc perl
- uses: dtolnay/rust-toolchain@stable
- run: apt-get remove curl ca-certificates openssl --yes
- run: cargo build
- run: ./target/debug/pkgx +git