Skip to content

Fix insecure Composer download (#94) #214

Fix insecure Composer download (#94)

Fix insecure Composer download (#94) #214

Workflow file for this run

name: CI
on:
push:
branches: [main, master]
pull_request:
branches: [main, master]
jobs:
lint:
name: Lint Shell Scripts
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install ShellCheck
run: sudo apt-get update && sudo apt-get install -y shellcheck
- name: Lint all shell scripts
run: |
# Find all .sh files and the dotfiles CLI
find . -name "*.sh" -type f | xargs shellcheck --severity=warning || true
shellcheck --severity=warning tools/dotfiles || true
validate-templates:
name: Validate Chezmoi Templates
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install chezmoi
run: |
sh -c "$(curl -fsLS get.chezmoi.io)" -- -b /usr/local/bin
- name: Validate templates (dry run)
run: |
# Initialize chezmoi with test data (non-interactive)
chezmoi init --source=$PWD --no-tty --promptString name="Test User" --promptString email="test@example.com" --promptString editor="vim" || true
# Check that templates can be parsed (won't apply since 1Password not available)
chezmoi diff --source=$PWD || echo "Template validation completed (some may fail without 1Password)"
test-bootstrap-syntax:
name: Test Bootstrap Script Syntax
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Check bash syntax
run: |
# Check syntax of all shell scripts
for script in tools/*.sh cron/*.sh; do
if [[ -f "$script" ]]; then
echo "Checking syntax: $script"
bash -n "$script"
fi
done
- name: Check dotfiles CLI syntax
run: bash -n tools/dotfiles
test-doctor:
name: Test Doctor Script
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install chezmoi
run: |
if [[ "$RUNNER_OS" == "macOS" ]]; then
brew install chezmoi
else
sh -c "$(curl -fsLS get.chezmoi.io)" -- -b /usr/local/bin
fi
- name: Setup minimal environment
run: |
# Create required directories
mkdir -p ~/.config/chezmoi
mkdir -p ~/.local/share/chezmoi
mkdir -p ~/.local/bin
mkdir -p ~/.cache
mkdir -p ~/.local/state
# Copy source to chezmoi directory
cp -r . ~/.local/share/chezmoi/
# Create minimal chezmoi config
cat > ~/.config/chezmoi/chezmoi.toml << 'EOF'
[data]
name = "Test User"
email = "test@example.com"
editor = "vim"
onepassword = false
EOF
- name: Run doctor (quick mode)
run: |
chmod +x tools/doctor.sh
bash tools/doctor.sh --quick || echo "Doctor completed with warnings (expected in CI)"
test-dotfiles-cli:
name: Test Dotfiles CLI
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install chezmoi
run: |
if [[ "$RUNNER_OS" == "macOS" ]]; then
brew install chezmoi
else
sh -c "$(curl -fsLS get.chezmoi.io)" -- -b /usr/local/bin
fi
- name: Setup environment
run: |
mkdir -p ~/.local/share/chezmoi
mkdir -p ~/.local/bin
cp -r . ~/.local/share/chezmoi/
ln -sf ~/.local/share/chezmoi/tools/dotfiles ~/.local/bin/dotfiles
export PATH="$HOME/.local/bin:$PATH"
- name: Test CLI help
run: |
export PATH="$HOME/.local/bin:$PATH"
dotfiles help
- name: Test CLI status command
run: |
export PATH="$HOME/.local/bin:$PATH"
dotfiles status || echo "Status completed (some checks may fail in CI)"
validate-brewfile:
name: Validate Brewfile
runs-on: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Validate Brewfile syntax
run: |
# Check Brewfile syntax (won't install, just validate)
brew bundle check --file=Brewfile 2>&1 || echo "Brewfile validation completed"
- name: List Brewfile contents
run: |
echo "=== Formulae ==="
grep -E "^brew " Brewfile | wc -l
echo "=== Casks ==="
grep -E "^cask " Brewfile | wc -l
echo "=== Taps ==="
grep -E "^tap " Brewfile | wc -l
markdown-lint:
name: Lint Documentation
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Lint Markdown files
uses: DavidAnson/markdownlint-cli2-action@v16
with:
globs: |
**/*.md
!node_modules
continue-on-error: true # Don't fail on markdown issues
build:
name: Build Check
needs: [lint, validate-templates, test-bootstrap-syntax]
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Build summary
run: |
echo "## Build Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Component | Status |" >> $GITHUB_STEP_SUMMARY
echo "|-----------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| Shell Scripts | ✅ Linted |" >> $GITHUB_STEP_SUMMARY
echo "| Chezmoi Templates | ✅ Validated |" >> $GITHUB_STEP_SUMMARY
echo "| Bootstrap Script | ✅ Syntax OK |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Files" >> $GITHUB_STEP_SUMMARY
echo "- Shell scripts: $(find . -name '*.sh' | wc -l)" >> $GITHUB_STEP_SUMMARY
echo "- Templates: $(find . -name '*.tmpl' | wc -l)" >> $GITHUB_STEP_SUMMARY
echo "- Documentation: $(find . -name '*.md' | wc -l)" >> $GITHUB_STEP_SUMMARY