diff --git a/.github/actions/setup-poetry/action.yml b/.github/actions/setup-poetry/action.yml new file mode 100644 index 0000000..e9ce697 --- /dev/null +++ b/.github/actions/setup-poetry/action.yml @@ -0,0 +1,19 @@ +name: 'Set up Poetry and install' +description: 'Set up a specific version of Poetry and install dependencies using caching.' +inputs: + python-version: + description: "Version range or exact version of Python or PyPy to use, using SemVer's version range syntax." + default: '3.11' +runs: + using: 'composite' + steps: + - name: Install poetry + run: pipx install poetry==1.8.3 + shell: bash + - uses: actions/setup-python@v4 + with: + python-version: ${{ inputs.python-version }} + cache: 'poetry' + - name: Install dependencies + run: poetry install --all-extras + shell: bash diff --git a/.github/workflows/actionlint.yml b/.github/workflows/actionlint.yml new file mode 100644 index 0000000..c2ae5b4 --- /dev/null +++ b/.github/workflows/actionlint.yml @@ -0,0 +1,23 @@ +name: Lint GitHub Actions workflows +on: + push: + branches: ["main"] + paths: + - '.github/**' + pull_request: + branches: ["main"] + paths: + - '.github/**' + +jobs: + actionlint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Download actionlint + id: get_actionlint + run: bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash) + shell: bash + - name: Check workflow files + run: PATH=".:$PATH" make action-lint + shell: bash diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml new file mode 100644 index 0000000..312fb05 --- /dev/null +++ b/.github/workflows/checks.yml @@ -0,0 +1,34 @@ +name: Run code maintenance checks [linters and tests] +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + py-lint: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.10', '3.11', '3.12'] + steps: + - uses: actions/checkout@v3 + - uses: ./.github/actions/setup-poetry + with: + python-version: ${{ matrix.python-version }} + - name: Run styling check + run: poetry run pre-commit run --all-files + + markdown-lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: markdownlint-cli2-action + uses: DavidAnson/markdownlint-cli2-action@v16 + with: + globs: "**/*.md" + diff --git a/.gitignore b/.gitignore index 1369e39..694b749 100644 --- a/.gitignore +++ b/.gitignore @@ -441,3 +441,4 @@ pip-selfcheck.json # Makefile .action-lint +.markdown-lint diff --git a/Makefile b/Makefile index 1bca857..d5d6ab2 100644 --- a/Makefile +++ b/Makefile @@ -18,9 +18,12 @@ endif TAG=$(shell git rev-parse HEAD) -lint: +action-lint-file: $(CMD_PREFIX) touch .action-lint +md-lint-file: + $(CMD_PREFIX) touch .markdown-lint + .PHONY: docling-serve-cpu-image docling-serve-cpu-image: Containerfile ## Build docling-serve "cpu only" continaer image $(ECHO_PREFIX) printf " %-12s Containerfile\n" "[docling-serve CPU ONLY]" @@ -37,7 +40,7 @@ docling-serve-gpu-image: Containerfile ## Build docling-serve continaer image wi .PHONY: action-lint action-lint: .action-lint ## Lint GitHub Action workflows -.action-lint: $(shell find .github -type f) | lint +.action-lint: $(shell find .github -type f) | action-lint-file $(ECHO_PREFIX) printf " %-12s .github/...\n" "[ACTION LINT]" $(CMD_PREFIX) if ! which actionlint $(PIPE_DEV_NULL) ; then \ echo "Please install actionlint." ; \ @@ -51,3 +54,21 @@ action-lint: .action-lint ## Lint GitHub Action workflows fi $(CMD_PREFIX) actionlint -color $(CMD_PREFIX) touch $@ + +.PHONY: md-lint +md-lint: .md-lint ## Lint markdown files +.md-lint: $(wildcard */**/*.md) | md-lint-file + $(ECHO_PREFIX) printf " %-12s ./...\n" "[MD LINT]" + $(CMD_PREFIX) docker run --rm -v $$(pwd):/workdir davidanson/markdownlint-cli2:v0.14.0 "**/*.md" + $(CMD_PREFIX) touch $@ + +.PHONY: py-Lint +py-lint: ## Lint Python files + $(ECHO_PREFIX) printf " %-12s ./...\n" "[PY LINT]" + $(CMD_PREFIX) if ! which poetry $(PIPE_DEV_NULL) ; then \ + echo "Please install poetry." ; \ + echo "pip install poetry" ; \ + exit 1 ; \ + fi + $(CMD_PREFIX) poetry install --all-extras + $(CMD_PREFIX) poetry run pre-commit run --all-files