Skip to content

Release 3.6.0: full multi-distro support (Debian 13, Ubuntu, Arch, Fe… #440

Release 3.6.0: full multi-distro support (Debian 13, Ubuntu, Arch, Fe…

Release 3.6.0: full multi-distro support (Debian 13, Ubuntu, Arch, Fe… #440

Workflow file for this run

name: CI
on: [push, pull_request]
jobs:
lint:
name: Lint and syntax
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Install shells and shellcheck
run: |
sudo apt-get update
sudo apt-get install -y shellcheck zsh fish
- name: shellcheck (scripts, warning severity)
run: shellcheck -S warning -f gcc ./*.sh
- name: shellcheck (shell configs, error severity)
run: shellcheck -S error -f gcc .bashrc .bash_aliases .bashrc_help
- name: bash syntax
run: |
for f in *.sh .bashrc .bash_aliases .bashrc_help; do
bash -n "$f"
done
- name: zsh syntax
run: |
zsh -n .zshrc
zsh -n .zshrc_help
- name: fish syntax
run: |
fish --no-execute config.fish
fish --no-execute fish_help
install-test:
name: Install on ${{ matrix.image }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
image: ["debian:13", "debian:12", "ubuntu:24.04"]
container:
image: ${{ matrix.image }}
env:
# The runner defaults container HOME to /github/home, but the
# installer resolves the real user's home via getent (/root for
# root) — keep them consistent so setup, doctor and the shell
# configs all agree on where things live.
HOME: /root
DXSBASH_SKIP_FONT: "1"
DEBIAN_FRONTEND: noninteractive
steps:
- name: Install prerequisites
run: |
apt-get update
apt-get install -y sudo git curl wget ca-certificates unzip
- name: Checkout repository
uses: actions/checkout@v6
- name: Stage repository at the install location
run: |
mkdir -p /root/linuxtoolbox
cp -a "$GITHUB_WORKSPACE" /root/linuxtoolbox/dxsbash
git config --global --add safe.directory /root/linuxtoolbox/dxsbash
- name: Run installer (bash, non-interactive)
run: |
cd /root/linuxtoolbox/dxsbash
./setup.sh --install --yes --shell bash
- name: Doctor health check
run: |
cd /root/linuxtoolbox/dxsbash
./doctor.sh --no-color --verbose
- name: Config loads and helper commands work
run: |
bash -c 'source /root/.bashrc; type extract >/dev/null; type aliases >/dev/null; echo ".bashrc loads OK"'
test -x /usr/local/bin/update-dxsbash
test -x /usr/local/bin/dxsbash-config
test -x /usr/local/bin/dxsbash-repair
test -x /usr/local/bin/dxsbash-doctor
test -x /usr/local/bin/dxsbash-audit
test -x /usr/local/bin/dxsbash
/usr/local/bin/dxsbash version
/usr/local/bin/dxsbash help
- name: Security audit runs
run: |
# audit exits 1 when it finds FAILs, which is expected in a
# bare container — assert it produces a summary either way.
/usr/local/bin/dxsbash audit --no-color | tee /tmp/audit.txt || true
grep -q "Summary" /tmp/audit.txt
/usr/local/bin/dxsbash-audit --help >/dev/null
- name: Security summary caches and prints
run: |
/root/linuxtoolbox/dxsbash/secsummary.sh --refresh | grep -q "Security:"
test -f /root/.dxsbash/security-summary.txt
# --startup must be fast and must not error
/root/linuxtoolbox/dxsbash/secsummary.sh --startup | grep -q "Security:"