From 87789153b1975aa391564d2a130b4893c783e984 Mon Sep 17 00:00:00 2001 From: Martin Bernstorff Date: Sun, 15 Oct 2023 11:34:45 +0000 Subject: [PATCH 1/9] misc. --- .github/workflows/pre-commit.yml | 58 ++++---------- .github/workflows/static_type_checks.yml | 99 ++++-------------------- .github/workflows/tests.yml | 74 +++++------------- Dockerfile.dev | 16 ++-- makefile | 14 ++++ pyproject.toml | 21 +---- 6 files changed, 71 insertions(+), 211 deletions(-) create mode 100644 makefile diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 3007a4b0..fa4e9cf8 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -9,55 +9,27 @@ on: branches: [main] jobs: - pre-commit: - permissions: - pull-requests: write + build: concurrency: group: "${{ github.workflow }} @ ${{ github.ref }}" cancel-in-progress: true - if: ${{ github.actor != 'dependabot[bot]' }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - with: - repository: ${{ github.event.pull_request.head.repo.full_name }} - ref: ${{ github.event.pull_request.head.ref }} - token: ${{ secrets.PAT }} + - name: Checkout (GitHub) + uses: actions/checkout@v3 - - uses: actions/setup-python@v4 + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 with: - python-version: "3.9" - - - name: Install pre-commit - run: pip install pre-commit - - - name: Run pre-commit - id: pre_commit - continue-on-error: true - run: | - if pre-commit run --color always --all-files; then - echo "Pre-commit check passed" - echo "pre_commit_failed=0" >> $GITHUB_OUTPUT - else - echo "Pre-commit check failed" - echo "pre_commit_failed=1" >> $GITHUB_OUTPUT - exit 1 - fi + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} - # Have this step before commit in case the PR is from a fork. In this case, we want the - # add-pr-comment to fail, because it makes it means that the contributer is directed here, - # and are given the informative error message, instead of directed to a "could not commit error message". - - uses: mshick/add-pr-comment@v2 - if: ${{ steps.pre_commit.outputs.pre_commit_failed == 1 && github.event_name == 'pull_request' }} - id: add_comment + - name: Pre-build dev container image + uses: devcontainers/ci@v0.3 with: - message: | - Looks like some formatting rules failed. You can: - - 🏎️ Fix locally by running `inv pr` - - We also recommend setting up the `ruff` and `black` extensions to auto-format on save in your chosen editor. - - - name: Fail workflow - if: ${{ steps.pre_commit.outputs.pre_commit_failed == 1 && github.event_name == 'pull_request' }} - run: exit 1 + imageName: ghcr.io/MartinBernstorff/personal-mnemonic-medium/ + cacheFrom: ghcr.io/MartinBernstorff/personal-mnemonic-medium/ + push: never + runCmd: + make lint \ No newline at end of file diff --git a/.github/workflows/static_type_checks.yml b/.github/workflows/static_type_checks.yml index 72ef703a..b619acf8 100644 --- a/.github/workflows/static_type_checks.yml +++ b/.github/workflows/static_type_checks.yml @@ -3,95 +3,28 @@ # use stubs from imports name: static_type_checks -on: - pull_request: - branches: [main] - push: - branches: [main] - jobs: - static_type_checks: - runs-on: ubuntu-latest - permissions: - pull-requests: write + build: concurrency: group: "${{ github.workflow }} @ ${{ github.ref }}" cancel-in-progress: true - strategy: - matrix: - os: [ubuntu-latest] - python-version: ["3.9"] + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - - name: Cache tox - uses: actions/cache@v3.2.6 - id: cache_tox - with: - path: | - .tox - key: ${{ runner.os }}-${{ matrix.python-version }}-static-type-checks - - - name: Set up Python - uses: actions/setup-python@v4 - id: setup_python - with: - python-version: ${{ matrix.python-version}} - - - name: Install dependencies - shell: bash - run: | - pip install invoke tox - - - name: Run static type checker - id: pyright - continue-on-error: true - run: | - if inv static-type-checks; then - echo "pyright check passed" - echo "pyright_failed=0" >> $GITHUB_OUTPUT - else - echo "pyright check failed" - echo "pyright_failed=1" >> $GITHUB_OUTPUT - fi + - name: Checkout (GitHub) + uses: actions/checkout@v3 - - name: Find Comment - uses: peter-evans/find-comment@v2 - id: find_comment - if: ${{github.event_name == 'pull_request'}} - continue-on-error: true + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 with: - issue-number: ${{ github.event.pull_request.number }} - comment-author: "github-actions[bot]" - body-includes: ✨ Looks like pyright failed ✨ + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} - - uses: mshick/add-pr-comment@v2 - if: ${{ steps.pyright.outputs.pyright_failed == 1 && github.event_name == 'pull_request'}} - id: add_comment + - name: Pre-build dev container image + uses: devcontainers/ci@v0.3 with: - message: | - ✨ Looks like pyright failed ✨ - - If you want to fix this, we recommend doing it locally by either: - - a) Enabling pyright in VSCode and going through the errors in the problems tab - - `VSCode settings > Python > Analysis: Type checking mode > "basic"` - - b) Debugging via the command line - - 1. Installing pyright, which is included in the dev dependencies: `pip install -e ".[dev]"` - 2. Diagnosing the errors by running `pyright .` - - - uses: mshick/add-pr-comment@v2 - if: ${{ steps.pyright.outputs.pyright_failed == 0 && steps.find_comment.outputs.comment-id != '' && github.event_name == 'pull_request'}} - with: - message-id: ${{ steps.find_comment.outputs.comment-id }} - message: | - 🌟 pyright succeeds! 🌟 - - - name: Show pyright output - id: fail_run - if: ${{steps.pyright.outputs.pyright_failed == 1}} - run: | - inv static-type-checks # Rerunning pyright isn't optimal computationally, but typically takes no more than a couple of seconds, and this ensures that the errors are in the failing step + imageName: ghcr.io/MartinBernstorff/personal-mnemonic-medium/ + cacheFrom: ghcr.io/MartinBernstorff/personal-mnemonic-medium/ + push: never + runCmd: + make type-check \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a7b26e0e..83173447 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -9,67 +9,29 @@ on: pull_request: branches: [main] -jobs: - pytest: - runs-on: ${{ matrix.os }} - permissions: - contents: read - issues: read - checks: write - pull-requests: write - strategy: - matrix: - os: [ubuntu-latest] #, macos-latest, windows-latest] - python-version: ["3.9"] # , "3.10"] - # This allows a subsequently queued workflow run to interrupt previous runs +jobs: + build: concurrency: - group: "${{ github.workflow }}-${{ matrix.python-version}}-${{ matrix.os }} @ ${{ github.ref }}" + group: "${{ github.workflow }} @ ${{ github.ref }}" cancel-in-progress: true - + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - - name: Cache tox - uses: actions/cache@v3.2.6 - id: cache_tox - with: - path: | - .tox - key: ${{ runner.os }}-${{ matrix.python-version }}-tests - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - - name: Install dependencies - shell: bash - run: | - pip install invoke tox - - - name: Run and write pytest - shell: bash - run: | - # Specifying two sets of "--pytest-args" is required for invoke to parse it as a list - inv test --pytest-args="--durations=0" --pytest-args="--junitxml=pytest.xml --cov-report=term-missing --cov=src/" - + - name: Checkout (GitHub) + uses: actions/checkout@v3 - - name: Test report on failures - uses: EnricoMi/publish-unit-test-result-action@v2 - id: test_report_with_annotations - if: ${{ matrix.os == 'ubuntu-latest' && matrix.python-version == '3.9' && github.actor != 'dependabot[bot]' && github.event_name == 'pull_request' && (success() || failure()) }} # Do not run for dependabot, run whether tests failed or succeeded + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 with: - comment_mode: "failures" - files: | - pytest.xml + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} - - name: Pytest coverage comment - id: coverage-comment - uses: MishaKav/pytest-coverage-comment@main - if: ${{ matrix.os == 'ubuntu-latest' && matrix.python-version == '3.9' && github.actor != 'dependabot[bot]' && github.event_name == 'pull_request' && (success() || failure()) }} + - name: Pre-build dev container image + uses: devcontainers/ci@v0.3 with: - create-new-comment: false - report-only-changed-files: false - pytest-coverage-path: pytest-coverage.txt - junitxml-path: ./pytest.xml + imageName: ghcr.io/MartinBernstorff/personal-mnemonic-medium/ + cacheFrom: ghcr.io/MartinBernstorff/personal-mnemonic-medium/ + push: never + runCmd: + make test \ No newline at end of file diff --git a/Dockerfile.dev b/Dockerfile.dev index 226c1034..cf2ee13f 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,26 +1,20 @@ # Use an official Python runtime as a parent image -FROM python:3.9-bullseye +FROM python:3.11-bullseye # Set the working directory to /app WORKDIR /app # Install deps -COPY pyproject.toml /app/ +COPY pyproject.toml ./ RUN pip install .[dev] RUN pip install .[tests] # Setup dev env -COPY tasks.py pyproject.toml ./ -RUN inv static-type-checks +COPY makefile pyproject.toml ./ +RUN make type-check COPY .pre-commit-config.yaml ./ -RUN git init && pre-commit run - -RUN LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[^"]*') \ - && curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz" \ - && tar xf lazygit.tar.gz lazygit \ - && install lazygit /usr/local/bin -RUN mkdir -p ~/.config/lazygit/ && touch ~/.config/lazygit/config.yml && echo "disableStartupPopups: true" >> ~/.config/lazygit/config.yml +RUN git init && make lint RUN type -p curl >/dev/null || (apt update && apt install curl -y) && curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \ && chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \ diff --git a/makefile b/makefile new file mode 100644 index 00000000..120a0803 --- /dev/null +++ b/makefile @@ -0,0 +1,14 @@ +lint: + pre-commit run --all-files + +test: + pytest -n auto -rfE --failed-first --disable-warnings -q + +type-check: + pyright . + +pr: + make lint & make test & make type-check + git push + gh pr create + gh pr merge --auto --merge \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index c4e69ca9..3323be32 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,9 +13,9 @@ classifiers = [ "Operating System :: POSIX :: Linux", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", - "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.11", ] -requires-python = ">=3.8" +requires-python = ">=3.11" dependencies = [ "misaka>=2.1.1", "genanki>=0.13.0", @@ -28,7 +28,7 @@ dependencies = [ [project.optional-dependencies] dev = [ "cruft>=2.0.0", - "pyright==1.1.330.post0", + "pyright==1.1.331", "pyright-polite>=0.0.1", "pre-commit>=2.20.0", "ruff>=0.0.254", @@ -43,21 +43,6 @@ tests = [ "pytest-sugar>=0.9.4", "tox>=4.5.0", ] -docs = [ - "sphinx>=5.3.0,<7.3.0", - "furo>=2022.12.7,<2023.9.11", # theme - "sphinx-copybutton>=0.5.1,<0.5.2", - "sphinxext-opengraph>=0.7.3,<0.8.2", - "sphinx_design>=0.3.0,<0.5.1", - "myst-nb>=0.6.0,<1.17.0", - "sphinx_togglebutton>=0.2.3,<0.4.0", -] -tutorials = [ - "jupyter>=1.0.0,<1.1.0", - "sphinx_togglebutton>=0.2.3,<0.4.0", - "myst-nb>=0.6.0,<1.17.0", # for rendering notebooks - "jupyter>=1.0.0,<1.1.0", # for tutorials -] [project.urls] homepage = "https://github.com/MartinBernstorff/personal-mnemonic-medium" From 8b90fb1f916b55d8c61445497a75d8dc579360f4 Mon Sep 17 00:00:00 2001 From: Martin Bernstorff Date: Sun, 15 Oct 2023 11:45:02 +0000 Subject: [PATCH 2/9] dev: simplify dev container --- Dockerfile.dev | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/Dockerfile.dev b/Dockerfile.dev index cf2ee13f..ad5ce49f 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,5 +1,5 @@ # Use an official Python runtime as a parent image -FROM python:3.11-bullseye +FROM python:3.10-bullseye # Set the working directory to /app WORKDIR /app @@ -9,19 +9,6 @@ COPY pyproject.toml ./ RUN pip install .[dev] RUN pip install .[tests] -# Setup dev env -COPY makefile pyproject.toml ./ -RUN make type-check - -COPY .pre-commit-config.yaml ./ -RUN git init && make lint - -RUN type -p curl >/dev/null || (apt update && apt install curl -y) && curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \ - && chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \ - && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null \ - && apt update \ - && apt install gh -y - # Install the entire app COPY . /app RUN pip install -e . From c780ae4499f4189a5fb2b317e04111eb6b5410a3 Mon Sep 17 00:00:00 2001 From: Martin Bernstorff Date: Sun, 15 Oct 2023 11:45:10 +0000 Subject: [PATCH 3/9] python3 .10 --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 3323be32..10a436e1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,9 +13,9 @@ classifiers = [ "Operating System :: POSIX :: Linux", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", - "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.10", ] -requires-python = ">=3.11" +requires-python = ">=3.10" dependencies = [ "misaka>=2.1.1", "genanki>=0.13.0", From 9ed6b15eb71173be5f5e9a3cfe6ae4f499ae6604 Mon Sep 17 00:00:00 2001 From: Martin Bernstorff Date: Sun, 15 Oct 2023 11:45:17 +0000 Subject: [PATCH 4/9] add gh cli to devcontainer.json --- .devcontainer/devcontainer.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 63fb45f2..d1c36a5a 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,9 +14,13 @@ "ms-python.python", "charliermarsh.ruff", "ms-python.black-formatter", - "ms-azuretools.vscode-docker" + "ms-azuretools.vscode-docker", + "ms-vscode.makefile-tools" ] } + }, + "features": { + "ghcr.io/devcontainers/features/github-cli:1": {} } // Features to add to the dev container. More info: https://containers.dev/features. // "features": {}, From 12ab185b22af6f0f0109f9147cf895ac632e8c59 Mon Sep 17 00:00:00 2001 From: Martin Bernstorff Date: Sun, 15 Oct 2023 11:47:47 +0000 Subject: [PATCH 5/9] simplify ci --- .devcontainer/devcontainer.json | 3 +- .github/workflows/static_type_checks.yml | 30 --------------- .github/workflows/tests.yml | 37 ------------------- .../{pre-commit.yml => validate.yml} | 2 +- makefile | 5 ++- 5 files changed, 7 insertions(+), 70 deletions(-) delete mode 100644 .github/workflows/static_type_checks.yml delete mode 100644 .github/workflows/tests.yml rename .github/workflows/{pre-commit.yml => validate.yml} (97%) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d1c36a5a..ab3d5111 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -15,7 +15,8 @@ "charliermarsh.ruff", "ms-python.black-formatter", "ms-azuretools.vscode-docker", - "ms-vscode.makefile-tools" + "ms-vscode.makefile-tools", + "github.vscode-github-actions" ] } }, diff --git a/.github/workflows/static_type_checks.yml b/.github/workflows/static_type_checks.yml deleted file mode 100644 index b619acf8..00000000 --- a/.github/workflows/static_type_checks.yml +++ /dev/null @@ -1,30 +0,0 @@ -# We do not include static_type_checks as a pre-commit hook because pre-commit hooks -# are installed in their own virtual environment, so static_type_checks cannot -# use stubs from imports -name: static_type_checks - -jobs: - build: - concurrency: - group: "${{ github.workflow }} @ ${{ github.ref }}" - cancel-in-progress: true - runs-on: ubuntu-latest - steps: - - name: Checkout (GitHub) - uses: actions/checkout@v3 - - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Pre-build dev container image - uses: devcontainers/ci@v0.3 - with: - imageName: ghcr.io/MartinBernstorff/personal-mnemonic-medium/ - cacheFrom: ghcr.io/MartinBernstorff/personal-mnemonic-medium/ - push: never - runCmd: - make type-check \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml deleted file mode 100644 index 83173447..00000000 --- a/.github/workflows/tests.yml +++ /dev/null @@ -1,37 +0,0 @@ -# This workflow will install Python dependencies, run pytests and run notebooks -# then it will in python 3.9 (ubuntu-latest) create a badge with the coverage -# and add it to the PR. This badge will be updated if the PR is updated. - -name: Tests -on: - push: - branches: [main] - pull_request: - branches: [main] - - -jobs: - build: - concurrency: - group: "${{ github.workflow }} @ ${{ github.ref }}" - cancel-in-progress: true - runs-on: ubuntu-latest - steps: - - name: Checkout (GitHub) - uses: actions/checkout@v3 - - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Pre-build dev container image - uses: devcontainers/ci@v0.3 - with: - imageName: ghcr.io/MartinBernstorff/personal-mnemonic-medium/ - cacheFrom: ghcr.io/MartinBernstorff/personal-mnemonic-medium/ - push: never - runCmd: - make test \ No newline at end of file diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/validate.yml similarity index 97% rename from .github/workflows/pre-commit.yml rename to .github/workflows/validate.yml index fa4e9cf8..e5eca8f3 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/validate.yml @@ -32,4 +32,4 @@ jobs: cacheFrom: ghcr.io/MartinBernstorff/personal-mnemonic-medium/ push: never runCmd: - make lint \ No newline at end of file + make validate \ No newline at end of file diff --git a/makefile b/makefile index 120a0803..8f4fac02 100644 --- a/makefile +++ b/makefile @@ -7,8 +7,11 @@ test: type-check: pyright . -pr: +validate: make lint & make test & make type-check + +pr: + make validate git push gh pr create gh pr merge --auto --merge \ No newline at end of file From 5d83095ca334f830f965810fd4fee49ca639e849 Mon Sep 17 00:00:00 2001 From: Martin Bernstorff Date: Sun, 15 Oct 2023 11:48:51 +0000 Subject: [PATCH 6/9] fix type in dev container image spec --- .github/workflows/validate.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index e5eca8f3..acae93bc 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -28,8 +28,8 @@ jobs: - name: Pre-build dev container image uses: devcontainers/ci@v0.3 with: - imageName: ghcr.io/MartinBernstorff/personal-mnemonic-medium/ - cacheFrom: ghcr.io/MartinBernstorff/personal-mnemonic-medium/ + imageName: ghcr.io/MartinBernstorff/personal-mnemonic-medium + cacheFrom: ghcr.io/MartinBernstorff/personal-mnemonic-medium push: never runCmd: make validate \ No newline at end of file From 6d332b80c639443a791c2a7e99d9310b0cf73747 Mon Sep 17 00:00:00 2001 From: Martin Bernstorff Date: Sun, 15 Oct 2023 11:51:16 +0000 Subject: [PATCH 7/9] another typo --- .github/workflows/validate.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index acae93bc..ee24054e 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -28,8 +28,8 @@ jobs: - name: Pre-build dev container image uses: devcontainers/ci@v0.3 with: - imageName: ghcr.io/MartinBernstorff/personal-mnemonic-medium - cacheFrom: ghcr.io/MartinBernstorff/personal-mnemonic-medium + imageName: ghcr.io/martinbernstorff/personal-mnemonic-medium + cacheFrom: ghcr.io/martinbernstorff/personal-mnemonic-medium push: never runCmd: make validate \ No newline at end of file From 3dfefa5a79bab037fa992994a977d5dff7d1a1b1 Mon Sep 17 00:00:00 2001 From: Martin Bernstorff Date: Sun, 15 Oct 2023 11:53:13 +0000 Subject: [PATCH 8/9] rename validation job --- .github/workflows/validate.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index ee24054e..8064d438 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -1,6 +1,6 @@ # GitHub action to check if pre-commit has been run. Runs from .pre-commit-config.yaml, where the pre-commit actions are. -name: run-pre-commit +name: validate on: pull_request: @@ -30,6 +30,6 @@ jobs: with: imageName: ghcr.io/martinbernstorff/personal-mnemonic-medium cacheFrom: ghcr.io/martinbernstorff/personal-mnemonic-medium - push: never + push: always runCmd: make validate \ No newline at end of file From f2d3e80705540a0bee34bd3b475a50db87dd5fdf Mon Sep 17 00:00:00 2001 From: Martin Bernstorff Date: Sun, 15 Oct 2023 11:55:48 +0000 Subject: [PATCH 9/9] Benchmark with prebuilt image