Имея ниже файл рабочего процесса в репозитории GitHub внутри папки .github/workflows
, который работает нормально:
# .github/workflows/markdown-lint.yml
name: markdown-lint
run-name: learning github action from workflow
on:
push:
branches:
- main
- develop
jobs:
markdown-lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js environment
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Lint Markdown files
run: |
npx markdownlint-cli '**/*.md' \
--config '.github/workflows/.markdownlint.json' \
--ignore '.github/CONTRIBUTING.md' \
--ignore '.github/CODE_OF_CONDUCT.md'\
--ignore 'CHANGELOG.md'
Теперь я хочу отделить командную часть run
, чтобы мы могли использовать ее повторно, поэтому создайте папку ./github/actions/md-lint/
и поместите ниже код:
# .github/actions/md-lint/action.yml
run: |
npx markdownlint-cli '**/*.md' \
--config '.github/workflows/.markdownlint.json' \
--ignore '.github/CONTRIBUTING.md' \
--ignore '.github/CODE_OF_CONDUCT.md'\
--ignore 'CHANGELOG.md'
и добавьте его в файл markdown-lint.yml
, как показано ниже:
- name: Lint Markdown files
uses: ././github/actions/md-lint/
но это не работает, выдает ошибку:
markdown-lint
Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '/home/runner/work/template/template/.github/actions/md-lint/action.yml'. Did you forget to run actions/checkout before running your local action?
Также пробовал с composite
согласно документации:
# .github/actions/md-lint/action.yml
runs:
using: 'composite'
run: |
npx markdownlint-cli '**/*.md' \
--config './github/actions/.markdownlint.json' \
--ignore '.github/CONTRIBUTING.md' \
--ignore '.github/CODE_OF_CONDUCT.md'\
--ignore 'CHANGELOG.md'
но выдает ошибку ниже
Error: /home/runner/work/template/template/./.github/actions/md-lint/action.yml (Line: 1, Col: 6): Unexpected value ''
Error: System.ArgumentException: Unexpected type 'NullToken' encountered while reading 'runs'. The type 'MappingToken' was expected.
at GitHub.DistributedTask.ObjectTemplating.Tokens.TemplateTokenExtensions.AssertMapping(TemplateToken value, String objectDescription)
at GitHub.Runner.Worker.ActionManifestManager.ConvertRuns(IExecutionContext executionContext, TemplateContext templateContext, TemplateToken inputsToken, String fileRelativePath, MappingToken outputs)
at GitHub.Runner.Worker.ActionManifestManager.Load(IExecutionContext executionContext, String manifestFile)
Error: Failed to load /home/runner/work/template/template/./.github/actions/md-lint/action.yml
Как мы можем добиться этого, сохраняя все команды запуска отдельно в папке actions/
и добавляя ссылки в файлы workflows/
?
окей, можем ли мы заменить steps
на run
ПОЧЕМУ ЛЮДИ СТРЕМЯТСЯ ЗАКРЫВАТЬСЯ и ОТРИЦАТЬ любой вопрос? Я знаю, что что-то не так в моем коде, поэтому прошу ее о помощи.
Учитывая, что вы проверяете свой репозиторий и что действие находится в том же репозитории, можно ссылаться на ваше действие по относительному пути. Однако для определения и вызова вашего действия необходимо внести несколько изменений.
Рабочий процесс — опечатка в ././github:
# .github/workflows/markdown-lint.yml
name: markdown-lint
run-name: learning github action from workflow
on:
push:
branches:
- main
- develop
jobs:
markdown-lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js environment
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Lint Markdown files
uses: ./.github/actions/md-lint
Требуется описание действия, требуется оболочка, а отступы должны соответствовать схеме действия:
# .github/actions/md-lint/action.yml
name: md-lint
description: Run npx markdownlint-cli
runs:
using: "composite"
steps:
- shell: bash
run: |
npx markdownlint-cli '**/*.md' \
--config '.github/workflows/.markdownlint.json' \
--ignore '.github/CONTRIBUTING.md' \
--ignore '.github/CODE_OF_CONDUCT.md'\
--ignore 'CHANGELOG.md'
Возможно, вы захотите разместить каталог действий в корне проекта. Это упростит относительный путь:
- name: Lint Markdown files
uses: ./md-lint
Спасибо, это сработало. Кроме того, я записал файл .markdownlint.json
в папке action/md-lint и изменил его в action.yml как --config ./.markdownlint.json
Отступы имеют значение в YAML (и
steps
— это массив объектов, а не строка); то, что вы показываете, не является действительным файлом метаданных составного действия.