* Test more if env variants

* The correct negation syntax is !=

* Make the Interpolate function support negated booleans from envs

* Move assert := a.New(t) into t.Run

This uncovered that some of the test premisses was wrong and the
Eval Bool function also had flaws

* Remove a stray logrus import

* Add an ACT env set to true

This can be used to skip certain steps that you don't want to run locally
when testing. E.g. steps that sends messages to Slack channels on successful
builds etc.

* Add a description about env.ACT to the readme

* A new attempt at Interpolation and EvalBool

* One small merge fix

* Remove some fmt.Printfs

* Fix some merge conflicts
This commit is contained in:
Torbjørn Vatn 2020-11-18 16:14:34 +01:00 committed by GitHub
parent 8ba3306aa4
commit b3299ecd30
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 31 additions and 0 deletions

View file

@ -6,6 +6,7 @@ env:
SOMETHING_TRUE: true
SOMETHING_FALSE: false
SOME_TEXT: text
ACT: true
jobs:
@ -389,3 +390,17 @@ jobs:
- name: "Double checking expr: true && €{{ env.SOMETHING_FALSE == 'true' }}"
if: steps.step57.conclusion == 'skipped'
run: echo "true && ${{ env.SOMETHING_FALSE == 'true' }} should have been true, but wasn't"
- name: "✅ I should run, expr: €{{ env.ACT }}"
id: step60
if: ${{ env.ACT }}
run: echo OK
- name: "Double checking expr: €{{ env.ACT }}"
if: steps.step60.conclusion == 'skipped'
run: echo "${{ env.ACT }} should have been true, but wasn't"
- name: "❌ I should not run, expr: €{{ !env.ACT }}"
id: step61
if: ${{ !env.ACT }}
run: echo "${{ !env.ACT }} should be false, but was evaluated to true;" exit 1;

View file

@ -166,6 +166,18 @@ Additionally, act supports loading environment variables from an `.env` file. Th
act --env-file my.env
```
# Skipping steps
Act adds a special environement variable `ACT` that can be used to skip a step that you
don't want to run locally. E.g. a step that posts a Slack message or bumps a version number.
```yml
- name: Some step
if: ${{ !env.ACT }}
run: |
...
```
# Events
Every [GitHub event](https://developer.github.com/v3/activity/events/types) is accompanied by a payload. You can provide these events in JSON format with the `--eventpath` to simulate specific GitHub events kicking off an action. For example:

View file

@ -47,6 +47,7 @@ func (rc *RunContext) GetEnv() map[string]string {
if rc.Env == nil {
rc.Env = mergeMaps(rc.Config.Env, rc.Run.Workflow.Env, rc.Run.Job().Env)
}
rc.Env["ACT"] = "true"
return rc.Env
}

View file

@ -126,6 +126,9 @@ func TestRunContext_EvalBool(t *testing.T) {
// Check github context
{in: "github.actor == 'nektos/act'", out: true},
{in: "github.actor == 'unknown'", out: false},
// The special ACT flag
{in: "${{ env.ACT }}", out: true},
{in: "${{ !env.ACT }}", out: false},
}
updateTestIfWorkflow(t, tables, rc)