Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Unrecognized named-value: 'env'. Located at position 1 within expression" when used in reusable workflow jobs #2372

Open
nive-copia opened this issue Jan 16, 2023 · 56 comments
Labels
bug Something isn't working

Comments

@nive-copia
Copy link

Describe the bug
Usage of env in workflow that uses reusable workflow generates "Unrecognized named-value: 'env'. Located at position 1 within expression"

To Reproduce
Use the following yml:

name: Test Workflow

on:
  push:

env:
  SOMETHING: 1000

  test:
    name: call workflow
    uses: ./.github/workflows/callee.yml
    secrets: inherit
    with:
      run_url: "{run_url}"
      message: ${{ env.SOMETHING }}

Expected behavior
env.SOMETHING is usable and can be passed into reusable workflow

Actual behavior

The workflow is not valid. .github/workflows/create-branch.yml (Line: #, Col: ##): Unrecognized named-value: 'env'. Located at position 1 within expression: env.SOMETHING

Runner Version and Platform

Version of your runner?

OS of the machine running the runner?
ubuntu-latest

What's not working?

image

@nive-copia nive-copia added the bug Something isn't working label Jan 16, 2023
@GrayJack
Copy link

I'm having the same issue

@nicole0707
Copy link

I have the same issue, there is workaround to use $GITHUB_OUTPUT instead.

@RajrupDasid
Copy link

Having the same issue . When it's going to fix?
any work around of it?

@nive-copia
Copy link
Author

Hi GHA folks: Any update on providing this capability? Some of us are using workarounds, including the one suggested by @nicole0707. But, having this feature will make the intent very clear and clean.

@ghost
Copy link

ghost commented Jan 26, 2023

hello! if i can help u. or something need to do.say step b step

@lucasmellos
Copy link

workaround is to use as a secret in the main workflows and then you'll be able to parse it to env in the reusable workflow like

env:
   SECRET: ${{secrets.MY_SECRET}}

@hoancs
Copy link

hoancs commented Feb 17, 2023

I'm having the same issue. Have we got any update?

@srinadhbh
Copy link

workaround is to use as a secret in the main workflows and then you'll be able to parse it to env in the reusable workflow like

env:
   SECRET: ${{secrets.MY_SECRET}}

In my case, git is considering subscription id as a secret. I am trying to print NSG/ASG id and git is omitting the output.

@hurricup
Copy link

hurricup commented Mar 5, 2023

Trying to use this approach to workaround #520 and bummer...

hurricup added a commit to Camelcade/Perl5-IDEA that referenced this issue Mar 5, 2023
- use public qodana linter for PRs
- do not collect and analyze coverage

Coverage analysis suppressed in the _coverage.yml instead of main workflow because of the bug on actions side, see  actions/runner#2372
@hurricup
Copy link

hurricup commented Mar 5, 2023

It is also unavailable in called workflow. I tried to move check into there and got:

b5676355294c9b6943a4a68c5 (Line: 14, Col: 9): Unrecognized named-value: 'env'. Located at position 1 within expression: env.COVERALLS_REPO_TOKEN Camelcade/Perl5-IDEA/.github/workflows/_coverage.yml@d08cee137234bd0b5676355294c9b6943a4a68c5 (Line: 14, Col: 9): Unexpected symbol: '${{'. Located at position 1 within expression: ${{ env.COVERALLS_REPO_TOKEN }}
    secrets: inherit

Called workflow is:

# re-usable workflow to merge and process coverage
name: Coverage

on:
  workflow_call:

env:
  COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}

jobs:
  analyze:
    name: Analysis
    runs-on: ubuntu-latest
    if: ${{ env.COVERALLS_REPO_TOKEN }}
....

hurricup added a commit to Camelcade/Perl5-IDEA that referenced this issue Mar 5, 2023
- use public qodana linter for PRs
- do not collect and analyze coverage

Coverage analysis suppressed in the _coverage.yml instead of main workflow because of the bug on actions side, see  actions/runner#2372
hurricup added a commit to Camelcade/Perl5-IDEA that referenced this issue Mar 5, 2023
- use public qodana linter for PRs
- do not collect and analyze coverage

Coverage analysis suppressed in the _coverage.yml instead of main workflow because of the bug on actions side, see  actions/runner#2372
@carrill1
Copy link

carrill1 commented Apr 4, 2023

I'm having the same issue 😐

@iBasit
Copy link

iBasit commented Apr 6, 2023

+1

@alexl-shopware
Copy link

+1. Get this fixed github, cmon.

@whsalazar
Copy link

The env context is not available from jobs.<job_id>.with.<with_id>. See https://docs.github.com/en/enterprise-cloud@latest/actions/learn-github-actions/contexts#context-availability

@hurricup
Copy link

@whsalazar the question is what the reason behind this? And if there is no real reason, would be nice to have it.

@harrisrobin
Copy link

I guess I wasted 30 mins of my life and ended up here like the rest of us

@whsalazar
Copy link

You can't use the env context outside steps, as described in the docs:

You can use the env context in the value of any key in a step except for the id and uses keys. Feel free to submit feedback and feature request at https://github.com/orgs/community/discussions/categories/actions?discussions_q=is%3Aopen+env+jobs+category%3AActions

@guanyingjie
Copy link

I have the same issue, hope github action can pass the env variable in the furture

@rijnhard
Copy link

Nasty workaround: https://stackoverflow.com/a/74217028/834280

@kschaer
Copy link

kschaer commented Jun 13, 2023

Same problem here. I have several reusable workflows that should receive the same with inputs - it's a shame I cannot simply set up the environment variables in the parent (caller) workflow and pass to the reusable (child) workflows.

@miguelangelgil
Copy link

miguelangelgil commented Jun 14, 2023

The solution is to pass the environment variables as the output of a job:

name: Test Workflow

on:
  push:

env:
  SOMETHING: 1000

jobs:
 get-env-vars:
    name: Get Environment vars
    runs-on: some-runner
    outputs:
      SOMETHING: ${{ env.SOMETHING }}
    steps:
      - run: echo "null"

  test:
    name: call workflow
    needs: [get-env-vars]
    if: ${{ always() }}
    uses: ./.github/workflows/callee.yml
    secrets: inherit
    with:
      run_url: "{run_url}"
      message: ${{  needs.get-env.outputs.SOMETHING }}

@ffineis
Copy link

ffineis commented Jun 15, 2023

Hey this got me really close - at least now i can reference names of env vars I need in with, but this approach won't work if the original env variable is a secret since GH doesn't export outputs that are secrets.

Warning: Skip output 'MY_SECRET' since it may contain secret.

@miguelangelgil
Copy link

@ffineis To pass secrets use secrets instead with. In the above case i use secrets: inherit that take the secrets that you define in yours reusable workflow if they are accessible from the current workflow.

@ffineis
Copy link

ffineis commented Jun 16, 2023

@miguelangelgil yes thanks secrets: inherit was the trick to expose secrets in the reusable workflow - thx! Wish I had seen this after 3 hours of smashing head in.

@joshjohanning
Copy link

You can use ${{ vars.MY_VAR }} stored in the repository instead of env when referencing in reusable workflows. Not perfect, but it works

@sajati
Copy link

sajati commented Jul 21, 2023

2023 and still have the same issue

@Ni55aN
Copy link

Ni55aN commented Dec 24, 2023

+1

5 similar comments
@FredericVaugeoisFlo
Copy link

+1

@dleitter
Copy link

+1

@felipefrocha
Copy link

+1

@ansctrianta
Copy link

+1

@JackOdell
Copy link

+1

@h-rasi
Copy link

h-rasi commented Mar 14, 2024

Why this issue is closed?!!! We are still seeing the error on our shared workflows that the env is unrecognised.

@ansctrianta
Copy link

Why this issue is closed?!!! We are still seeing the error on our shared workflows that the env is unrecognised.

+1

@lpsm-nuageit
Copy link

+1

robot-piglet pushed a commit to catboost/catboost that referenced this issue Mar 27, 2024
…reason (see actions/runner#2372)..

7cbb7fdbbd1ec0f94cdbb2b540241b49606a8bc7
@Yingsheng-eroad
Copy link

+1

4 similar comments
@kosswald
Copy link

kosswald commented Apr 4, 2024

+1

@vsamofal
Copy link

vsamofal commented Apr 9, 2024

+1

@VLuizNoggo
Copy link

+1

@gregoryca
Copy link

+1

PatrickDeVries added a commit to yobgob/too-many-hooks that referenced this issue Apr 30, 2024
### Why:

Workflow is invalid in its current state and never runs

### What's being changed (if available, include any code snippets,
screenshots, or gifs):

- Use [outputs hack](actions/runner#2372) to
load environment variables into the job-level conditional if

---------

Co-authored-by: Dawson Booth <dawson@dawsonbooth.com>
PatrickDeVries added a commit to PatrickDeVries/too-many-hooks that referenced this issue May 1, 2024
Workflow is invalid in its current state and never runs

screenshots, or gifs):

- Use [outputs hack](actions/runner#2372) to
load environment variables into the job-level conditional if

Co-Authored-By: Dawson Booth <dawson@dawsonbooth.com>
@sagi-sensorz
Copy link

just use vars instead of env

This is only relevant for repository level variables.
If we use mono repo with multiple workflows and want to define a reusable variable to pass to multiple reusable workflows (e.g. working_directory) within the workflow, there is no solution 🤦‍♂️ .
@whsalazar

Zabrimus added a commit to Zabrimus/VDRSternELEC that referenced this issue May 11, 2024
@AdamJudge
Copy link

+1
Extremely frustrating implementing new ideas benefiting DRY methods of coding. Our workflows have up to 16 jobs, and we only want certain ones to run on certain branches.

We moved from GitLab years ago, and are still missing what we thought would be key/obvious features

@lure8225
Copy link

+1
we intend to have a env variable set in the beginning by evluating some expression and then use this to conditionally trigger jobs. With this problem this will not work and the documentation clearly states that all contexts should be available.

@lure8225
Copy link

Just checked the code for the runner and current impression is that this can not be fixed on runner side as the conditions which jobs get executed is taken server side. A runner simply executes all Jobs it gets, I could not find any conditions checking (found them for steps where this is working fine)

Sadly server part is not open source so hard to support with fixing this

prismglue added a commit to prismglue/defold-builder-simple that referenced this issue May 19, 2024
@shgnplaatjies
Copy link

I bumped into this; and resolved it by using
${{ needs.your-job-name.outputs.YOUR_NON_SENSITIVE_VAR }}

It's not a long-term solution since it leads to a deprecation warning, nor is it appropriate for sensitive variables:

"
The set-output command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
"

@tompreston
Copy link

tompreston commented Jun 4, 2024

We were trying to use a repeated container image name. For anyone still searching, this part of the docs (from this comment) explained it for us. The env context is not available in the jobs.<job_id>.container workflow key.
Screenshot 2024-06-04 at 09 50 59

It looks like YAML anchors are not supported and there might be a route forwards with repository variables in the vars context, but unfortunately it doesn't follow the same branch protection rules. For example requiring a review to merge to master.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests