Ter o arquivo de fluxo de trabalho abaixo no repositório GitHub dentro .github/workflows
da pasta que funciona bem:
# .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'
Agora quero separar a run
parte do comando para que possamos reutilizar, então crie uma pasta ./github/actions/md-lint/
e coloque abaixo o código:
# .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'
e adicione-o no markdown-lint.yml
arquivo conforme abaixo:
- name: Lint Markdown files
uses: ././github/actions/md-lint/
mas não funciona, gera um erro:
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?
Também tentei composite
conforme a documentação :
# .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'
mas dá erro abaixo
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
Como podemos conseguir isso mantendo todos os comandos executados separadamente na actions/
pasta e adicionando referências nos workflows/
arquivos?
Considerando que você está verificando seu repo e que a ação está no mesmo repo, é possível fazer referência à sua ação via caminho relativo. No entanto, algumas alterações são necessárias para definir e invocar sua ação.
O fluxo de trabalho - erro de digitação em ././github:
A descrição da ação é obrigatória, o shell é obrigatório e a indentação deve seguir o esquema de ação :
Você pode considerar colocar o diretório de ação na raiz do projeto. Isso simplificará o caminho relativo: