name: ci on: push: branches: [main] pull_request: branches: [main] jobs: lint: runs-on: ubuntu-latest steps: - name: Check out code. uses: actions/checkout@v4 with: fetch-depth: 0 - name: 'Get Changed Files' id: 'files' run: | CHANGED_FILES=$(git diff --name-only "${BASE_SHA:-$BEFORE_SHA}...${HEAD_SHA:-$GITHUB_REF}") echo "::notice::Changed files: $CHANGED_FILES" { echo "added_modified<> "$GITHUB_OUTPUT" env: BASE_SHA: ${{ github.event.pull_request.base.sha }} HEAD_SHA: ${{ github.event.pull_request.head.sha }} BEFORE_SHA: "${{ github.event.before }}" - uses: 'actions/setup-go@v5' with: go-version: '1.20' - name: 'Install EditorConfig Lint' run: go install 'github.com/editorconfig-checker/editorconfig-checker/cmd/editorconfig-checker@latest' - name: 'Check EditorConfig Lint' run: echo "$FILES" | xargs ~/go/bin/editorconfig-checker env: # NOTE: use env to pass the output in order to avoid possible injection attacks FILES: "${{ steps.files.outputs.added_modified }}" - name: checkstyle run: ./scripts/checkstyle.py - name: Shellcheck run: shellcheck --severity=error bin/* ./*.sh - name: Lint and format Python with Ruff uses: astral-sh/ruff-action@v3 typo: runs-on: ubuntu-latest steps: - name: Check out code. uses: actions/checkout@v4 - name: Install poetry run: pip install poetry - name: Set up Python uses: actions/setup-python@v5 with: cache: 'poetry' cache-dependency-path: "tests/pyproject.toml" python-version-file: "tests/pyproject.toml" - name: Install dependencies run: | cd tests || exit poetry install --only dev - name: spell check run: | cd tests git grep --cached -l '' .. | \ grep -v -e 'History\.md' -e 'AUTHORS' -e 'man/.*\.1' -e 'man/.*\.html' | \ xargs poetry run codespell --ignore-words=../.github/.ignore_words test-pytest: name: 'Test with Pytest' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: submodules: recursive - name: Install poetry run: pip install poetry - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.12' cache: 'poetry' cache-dependency-path: "tests/pyproject.toml" python-version-file: "tests/pyproject.toml" - name: Install Python Dependencies run: | cd tests || exit poetry install --only test - name: Test with Pytest run: | cd tests poetry run pytest test-bats: name: 'Test with Bats' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: submodules: recursive - name: Setup Bats id: setup-bats uses: bats-core/bats-action@3.0.1 with: bats-version: 'v1.8.1' - name: Test with Bats env: BATS_LIB_PATH: ${{ steps.setup-bats.outputs.lib-path }} TERM: xterm run: bats ./tests build: strategy: fail-fast: false matrix: platform: - ubuntu-latest - macos-latest runs-on: ${{ matrix.platform }} steps: - name: Check out code. uses: actions/checkout@v4 - name: Linux Install if: matrix.platform == 'ubuntu-latest' run: sudo apt-get install -y bsdmainutils - name: Script run: ./check_integrity.sh - name: Brew release if: matrix.platform == 'macos-latest' run: | mkdir ../release && git archive --format=tar.gz HEAD > ../release/git-extras-release.tar.gz cd ../release tar -xzf git-extras-release.tar.gz && make PREFIX=$(pwd) INSTALL_VIA=brew ./bin/git-extras update | grep "brew upgrade git-extras"