From 7be48ceb899cbf19f78cf86ce1647d81008bac03 Mon Sep 17 00:00:00 2001 From: Nikolay Gagarinov Date: Thu, 29 Oct 2026 18:04:31 +0500 Subject: [PATCH 1/3] =?UTF-8?q?feat(template):=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=82=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B2=D1=83=D1=8E?= =?UTF-8?q?=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D1=83=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=20=D1=81=D1=82=D0=B5=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Шаблон давал общий слой dev-quality-gates, а слой под стек не появлялся: main.yml был заглушкой echo TODO, цели Makefile возвращали 0, и ненастроенный репозиторий выглядел проверенным. Теперь AGENTS.md ведёт первую настройку по adopt.md, цели Makefile падают до неё, а main.yml гоняет setup, lint и test везде, кроме самого шаблона. Co-Authored-By: Claude Opus 5.5 (1M context) --- .github/workflows/main.yml | 33 ++++++++++++++------------------- AGENTS.md | 16 ++++++++++++++++ Makefile | 8 +++++--- README.md | 6 ++++++ 4 files changed, 41 insertions(+), 22 deletions(-) create mode 100644 AGENTS.md diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8edcd20..56ac66e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,42 +1,37 @@ -# This is a basic workflow to help you get started with Actions - name: CI -# Controls when the workflow will run +# Сборка и тесты стека через цели Makefile. В самом шаблоне цели заглушки, +# поэтому здесь job пропускается, а в репозитории из шаблона он красный до +# первой настройки (AGENTS.md). on: - # Triggers the workflow on push or pull request events but only for the "main" branch push: - branches: [ "main" ] + branches: + - main pull_request: - branches: [ "main" ] - - # Allows you to run this workflow manually from the Actions tab + branches: + - main workflow_dispatch: - concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true + permissions: {} -# A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: - # This workflow contains a single job called "build" build: - # The type of runner that the job will run on + if: github.repository != 'hexlet-components/component-template' runs-on: ubuntu-latest timeout-minutes: 15 permissions: contents: read - - # Steps represent a sequence of tasks that will be executed as part of the job steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - # Runs a set of commands using the runners shell - - name: Run a multi-line script - run: | - echo "TODO: add workflow" + - uses: jdx/mise-action@82a612c5ab8bcda7cc5db6b7e81a8e7584c3dc6e # v5.2.3 + + - run: make setup + - run: make lint + - run: make test diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..f3e87d3 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,16 @@ +# AGENTS.md + +Репозиторий создан из шаблона `hexlet-components/component-template`. Шаблон ставит общий слой проверок из [dev-quality-gates](https://github.com/mokevnin/dev-quality-gates): mise, hk, commitlint, rumdl, typos, lychee, jactionlint и betterleaks. Проверки под стек репозитория шаблон не знает, их добавляет первая настройка. + +## Первая настройка + +Пока этот раздел в файле, репозиторий не настроен. Цели `Makefile` падают, и CI красный. + +1. Определи стек по задаче компонента. +2. Пройди [adopt.md](https://raw.githubusercontent.com/mokevnin/dev-quality-gates/main/docs/adopt.md) для этого стека. Общий слой уже стоит, его не трогай. Новые инструменты закрепляются в `mise.toml`, их шаги добавляются в `hk.pkl`. OSV-Scanner добавляется вместе с первым lock-файлом. +3. Фронтенд берёт CSS по `docs/css-frameworks-migration.md` из hexlet-exercise-kit. С React это Vite и Mantine, без React последний Tailwind. +4. Заполни цели `setup`, `lint` и `test` в `Makefile`. Компонент с публикацией получает выкладку в `.github/workflows/main.yml`, actions в ней закрепляются по SHA. +5. Добавь экосистему пакетов стека в `.github/dependabot.yml`. +6. Напиши в `README.md`, что это за компонент и для какого курса, проекта или программы он нужен. + +Настройка закончена, когда `mise run check` и `make setup lint test` проходят, каждый новый шаг проверки один раз упал на подложенном нарушении, а этот раздел удалён из файла. diff --git a/Makefile b/Makefile index 0d96c30..db4f2d8 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,10 @@ +# Цели заполняет первая настройка (AGENTS.md). До неё заглушки падают, чтобы CI +# не выдавал ненастроенный репозиторий за проверенный. setup: - @echo "TODO: add setup" + @echo "setup не настроен, см. AGENTS.md"; exit 1 test: - @echo "TODO: add tests" + @echo "test не настроен, см. AGENTS.md"; exit 1 lint: - @echo "TODO: add lint" + @echo "lint не настроен, см. AGENTS.md"; exit 1 diff --git a/README.md b/README.md index 970ad3c..32719b8 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,12 @@ Template for new repositories +```sh +gh repo create hexlet-components/ --public --template hexlet-components/component-template --description "" +``` + +After cloning, follow the first setup section in [AGENTS.md](AGENTS.md). + [![Hexlet Ltd. logo](https://raw.githubusercontent.com/Hexlet/assets/master/images/hexlet_logo128.png)](https://hexlet.io/?utm_source=github&utm_medium=link&utm_campaign=pg-dump-example) This repository is created and maintained by the team and the community of Hexlet, an educational project. [Read more about Hexlet](https://hexlet.io/pages/about?utm_source=github&utm_medium=link&utm_campaign=pg-dump-example). From ec0f63cff18086091f98565d515871072a147f7d Mon Sep 17 00:00:00 2001 From: Nikolay Gagarinov Date: Thu, 29 Oct 2026 18:16:25 +0500 Subject: [PATCH 2/3] =?UTF-8?q?docs(readme):=20=D1=81=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D0=B7=D0=B0=D0=B3=D0=BE=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D1=83=20README=20=D1=81=20=D0=B1=D0=B5=D0=B9=D0=B4=D0=B6?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8=20=D0=B8=20=D0=B1=D0=BB=D0=BE=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=20=D0=A5=D0=B5=D0=BA=D1=81=D0=BB=D0=B5=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Заготовка повторяет вид свежих компонентов: бейджи CI, описание для какого курса, запуск, проверки и блок Хекслета внизу. Блок раньше стоял наверху с utm_campaign=pg-dump-example. Первая настройка в AGENTS.md заменяет имя шаблона именем репозитория. Co-Authored-By: Claude Opus 5.5 (1M context) --- AGENTS.md | 2 +- README.md | 26 +++++++++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index f3e87d3..1f42686 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -11,6 +11,6 @@ 3. Фронтенд берёт CSS по `docs/css-frameworks-migration.md` из hexlet-exercise-kit. С React это Vite и Mantine, без React последний Tailwind. 4. Заполни цели `setup`, `lint` и `test` в `Makefile`. Компонент с публикацией получает выкладку в `.github/workflows/main.yml`, actions в ней закрепляются по SHA. 5. Добавь экосистему пакетов стека в `.github/dependabot.yml`. -6. Напиши в `README.md`, что это за компонент и для какого курса, проекта или программы он нужен. +6. Доведи `README.md` по его заготовке. Замени `component-template` именем репозитория, в том числе в бейджах и `utm_campaign`, опиши компонент и для какого курса, проекта или программы он нужен, удали цитату про шаблон. Блок про Хекслет внизу остаётся. Настройка закончена, когда `mise run check` и `make setup lint test` проходят, каждый новый шаг проверки один раз упал на подложенном нарушении, а этот раздел удалён из файла. diff --git a/README.md b/README.md index 32719b8..b457eb0 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,29 @@ # component-template -Template for new repositories +[![CI](https://github.com/hexlet-components/component-template/actions/workflows/main.yml/badge.svg)](https://github.com/hexlet-components/component-template/actions/workflows/main.yml) +[![Check](https://github.com/hexlet-components/component-template/actions/workflows/check.yml/badge.svg)](https://github.com/hexlet-components/component-template/actions/workflows/check.yml) + +> Шаблон репозиториев hexlet-components. Новый репозиторий создаётся командой ниже, а после клона его настраивает раздел «Первая настройка» в [AGENTS.md](AGENTS.md). Настройка заменяет `component-template` в этом файле именем репозитория, заполняет разделы и удаляет эту цитату. +> +> ```sh +> gh repo create hexlet-components/<имя> --public --template hexlet-components/component-template --description "<что это и для какого курса>" +> ``` + +Что это и для какого курса, проекта или программы Хекслета. Одним-двумя абзацами: кто пользуется компонентом (студент в уроке, проверка практики, стенд проекта) и что сломается у них, если его поменять. + +## Запуск ```sh -gh repo create hexlet-components/ --public --template hexlet-components/component-template --description "" +make setup +make test ``` -After cloning, follow the first setup section in [AGENTS.md](AGENTS.md). +## Проверки + +`mise run check` гоняет тот же набор, что CI: разметку, опечатки, ссылки, workflows и проверки стека. + +--- -[![Hexlet Ltd. logo](https://raw.githubusercontent.com/Hexlet/assets/master/images/hexlet_logo128.png)](https://hexlet.io/?utm_source=github&utm_medium=link&utm_campaign=pg-dump-example) +[![Hexlet Ltd. logo](https://raw.githubusercontent.com/Hexlet/assets/master/images/hexlet_logo128.png)](https://hexlet.io/?utm_source=github&utm_medium=link&utm_campaign=component-template) -This repository is created and maintained by the team and the community of Hexlet, an educational project. [Read more about Hexlet](https://hexlet.io/pages/about?utm_source=github&utm_medium=link&utm_campaign=pg-dump-example). +This repository is created and maintained by the team and the community of Hexlet, an educational project. [Read more about Hexlet](https://hexlet.io/pages/about?utm_source=github&utm_medium=link&utm_campaign=component-template). From 86c5e6fe46329f7fa7d613ba10d8104c01ea0205 Mon Sep 17 00:00:00 2001 From: Nikolay Gagarinov Date: Thu, 29 Oct 2026 18:28:48 +0500 Subject: [PATCH 3/3] =?UTF-8?q?refactor(make):=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D1=81=D1=82=D0=B8=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87?= =?UTF-8?q?=D0=B8=20=D0=B2=20mise=20=D0=B8=20=D0=BE=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=82=D1=8C=20Makefile=20=D0=BF=D1=80=D0=BE=D0=BA?= =?UTF-8?q?=D1=81=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Задачи проекта живут в mise.toml, make <задача> запускает mise run <задача>. Заглушка test падает до первой настройки, main.yml и check.yml зовут mise run. Линтеры стека становятся шагами hk и входят в check, отдельной задачи lint нет. Co-Authored-By: Claude Opus 5.5 (1M context) --- .github/workflows/check.yml | 2 ++ .github/workflows/main.yml | 11 +++++------ AGENTS.md | 8 ++++---- Makefile | 15 ++++++--------- README.md | 6 ++++-- mise.toml | 7 +++++++ 6 files changed, 28 insertions(+), 21 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index a89a508..d613554 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -31,6 +31,8 @@ jobs: - uses: jdx/mise-action@82a612c5ab8bcda7cc5db6b7e81a8e7584c3dc6e # v5.2.3 + - run: mise run setup + - name: Run checks run: mise run check env: diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 56ac66e..1075842 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,8 +1,8 @@ name: CI -# Сборка и тесты стека через цели Makefile. В самом шаблоне цели заглушки, -# поэтому здесь job пропускается, а в репозитории из шаблона он красный до -# первой настройки (AGENTS.md). +# Тесты стека через задачи mise. В самом шаблоне test заглушка, поэтому здесь +# job пропускается, а в репозитории из шаблона он красный до первой настройки +# (AGENTS.md). Линтеры стека идут шагами hk и запускаются в check.yml. on: push: branches: @@ -32,6 +32,5 @@ jobs: - uses: jdx/mise-action@82a612c5ab8bcda7cc5db6b7e81a8e7584c3dc6e # v5.2.3 - - run: make setup - - run: make lint - - run: make test + - run: mise run setup + - run: mise run test diff --git a/AGENTS.md b/AGENTS.md index 1f42686..793731a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -4,13 +4,13 @@ ## Первая настройка -Пока этот раздел в файле, репозиторий не настроен. Цели `Makefile` падают, и CI красный. +Пока этот раздел в файле, репозиторий не настроен. Задача `test` падает, и CI красный. 1. Определи стек по задаче компонента. -2. Пройди [adopt.md](https://raw.githubusercontent.com/mokevnin/dev-quality-gates/main/docs/adopt.md) для этого стека. Общий слой уже стоит, его не трогай. Новые инструменты закрепляются в `mise.toml`, их шаги добавляются в `hk.pkl`. OSV-Scanner добавляется вместе с первым lock-файлом. +2. Пройди [adopt.md](https://raw.githubusercontent.com/mokevnin/dev-quality-gates/main/docs/adopt.md) для этого стека. Общий слой уже стоит, его не трогай. Новые инструменты закрепляются в `mise.toml`, линтеры и форматтеры стека становятся шагами `hk.pkl`, и их запускает `mise run check`. OSV-Scanner добавляется вместе с первым lock-файлом. 3. Фронтенд берёт CSS по `docs/css-frameworks-migration.md` из hexlet-exercise-kit. С React это Vite и Mantine, без React последний Tailwind. -4. Заполни цели `setup`, `lint` и `test` в `Makefile`. Компонент с публикацией получает выкладку в `.github/workflows/main.yml`, actions в ней закрепляются по SHA. +4. Задачи проекта живут в `mise.toml`, а `Makefile` только проксирует `make <задача>` в `mise run <задача>`. Поставь установку зависимостей стека в `setup` перед `hk install` и заполни `test`. Компонент с публикацией получает выкладку в `.github/workflows/main.yml`, actions в ней закрепляются по SHA. 5. Добавь экосистему пакетов стека в `.github/dependabot.yml`. 6. Доведи `README.md` по его заготовке. Замени `component-template` именем репозитория, в том числе в бейджах и `utm_campaign`, опиши компонент и для какого курса, проекта или программы он нужен, удали цитату про шаблон. Блок про Хекслет внизу остаётся. -Настройка закончена, когда `mise run check` и `make setup lint test` проходят, каждый новый шаг проверки один раз упал на подложенном нарушении, а этот раздел удалён из файла. +Настройка закончена, когда `mise run setup`, `mise run check` и `mise run test` проходят, каждый новый шаг проверки один раз упал на подложенном нарушении, а этот раздел удалён из файла. diff --git a/Makefile b/Makefile index db4f2d8..9f87efe 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,7 @@ -# Цели заполняет первая настройка (AGENTS.md). До неё заглушки падают, чтобы CI -# не выдавал ненастроенный репозиторий за проверенный. -setup: - @echo "setup не настроен, см. AGENTS.md"; exit 1 +# Тонкий прокси: make <задача> запускает mise run <задача>. Задачи живут в mise.toml. +%: FORCE + @mise run $@ -test: - @echo "test не настроен, см. AGENTS.md"; exit 1 - -lint: - @echo "lint не настроен, см. AGENTS.md"; exit 1 +# Без этого правила make пытается собрать сам Makefile через прокси. +Makefile: ; +FORCE: ; diff --git a/README.md b/README.md index b457eb0..a6ae844 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,12 @@ ## Запуск ```sh -make setup -make test +mise run setup +mise run test ``` +`make <задача>` вызывает ту же задачу mise. + ## Проверки `mise run check` гоняет тот же набор, что CI: разметку, опечатки, ссылки, workflows и проверки стека. diff --git a/mise.toml b/mise.toml index 9bc82cf..5ec6bdb 100644 --- a/mise.toml +++ b/mise.toml @@ -10,10 +10,17 @@ pkl = "latest" rumdl = "latest" typos = "latest" +# Задачи проекта живут здесь, Makefile только проксирует make <задача> в mise run. +# Первая настройка (AGENTS.md) ставит зависимости стека в setup перед hk install +# и заполняет test. [tasks.setup] description = "Поставить зависимости и git-хуки" run = ["hk install"] +[tasks.test] +description = "Тесты стека" +run = 'echo "test не настроен, см. AGENTS.md" >&2; exit 1' + [tasks.check] description = "Все проверки, тот же набор, что гоняет CI" run = "hk check --all"