Allow definition/setup via local template instead of cli
Currently the only customization possible is via the global env property, but unfortunately this isn't available everywhere in the workflow and can't be used to customize a workflow template.
I foresee a few ways to reuse existing templates:
Plain merging of a local template (e.g. .github/workflows-ghat/ci.yml) with the remote template
# Fetch template
apply: fregante/ghat/templates/node
# Overwrite existing `on` property with
on:
- push
Importing single jobs
on:
- push
jobs:
test:
name: Let's test stuff
apply: fregante/ghat/templates/node#jobs.test # It would only merge the specific jobs.test section
build:
needs: test
steps:
- run: echo My other steps
An advanced way to customize the templates
For example it could apply some ENVs at merge time like GitHub does with the $default-branch variable:
- because
envdoesn't support arrays for example, and can't be used instrategy.matrix - some conditions could be pre-evaluated, so that whole steps/jobs could be dropped/added at merge time instead of just being silenced at run time.
Initially defined in https://github.com/sindresorhus/project-ideas/issues/128
The user would:
- Create the files in
.github/workflows-ghat - Run
$ ghatwithout any input
This is essentially the same as https://github.com/fregante/ghat/issues/9, except that https://github.com/fregante/ghat/issues/9 refers to just loading the .github/workflows files.
Alternative idea: The "local template" could just be a .js module that can do anything:
// In ghat
require('./.github/workflows/ghat.js'); // if it exists
// In local .github/workflows/ghat.js
const ghat = require('ghat');
(async () => {
const myWorkflow = await ghat.get('fregante/ghatemplates/file.yml');
myWorkflow.name = 'Coolio';
await ghat.save('ci.yml', myWorkflow);
})();
Pros
- No limits
Cons
- Verbose/complex
- Who really needs this? 🤔