Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is difference between with and env

I am new to github actions, and I see two things used for configuring the steps (correct me if i am wrong), with and env.

What is the difference between these two and how they are used.

uses: someAction
with:
  x: 10
  y: 20
env:
  x1: 30
  y2: 40
like image 948
tbhaxor Avatar asked Aug 31 '20 00:08

tbhaxor


People also ask

What does env mean in coding?

env is a shell command for Unix and Unix-like operating systems. It is used to either print a list of environment variables or run another utility in an altered environment without having to modify the currently existing environment.

What is the difference between env and set?

Since set is a built-in shell command, it also sees shell-local variables (including shell functions). env on the other hand is an independent executable; it only sees the variables that the shell passes to it, or environment variables.

What is env name?

env-name. The name of the system environment variable. env-value. The value of the system environment variable.

What is the use of env in Docker file?

ENV is mainly meant to provide default values for your future environment variables. Running dockerized applications can access environment variables. It's a great way to pass configuration values to your project. ARG values are not available after the image is built.


2 Answers

with - is specifically used for passing parameters to the action

env - is used specifically for introducing environment variables that can be accessed depending on scope of the resource

  workflow envs - can be accessed by all resources in the workflow except services
  
  job envs - can be accessed by all resources under job except services
  
  step envs - can be accessed by any resource within the step

Here is an example on how parameters are handled

Let's say an action is created with following parameter in action.yaml

name: 'Npm Audit Action'
inputs:
  dirPath:
    description: 'Directory path of the project to audit'
    required: true
    default: './'

Then we will provide this parameter through the with tag in our workflow

- name: Use the action
  uses: meroware/[email protected]
  with:
    dirPath: vulnerable-project

Then in the action code we would handle it as such if building a Node.js action

const core = require("@actions/core");
const dirPath = core.getInput("dirPath");

Envs within actions are accessed differently, let's say we are building a Node.js action, then we would access it through process.env. Going back to our example action

name: 'Npm Audit Action'
env:
   SOME_ENV: 'hey I am an env'

Then this could be accessed as

const { someEnv: SOME_ENV } = process.env
like image 54
Edward Romero Avatar answered Oct 19 '22 02:10

Edward Romero


You can see in the documentation with: used to define a variable.

While env defines an environmnent variable, as defined here and in jobs.<job_id>.env

  • an environment variable defined in a step will override job and workflow variables with the same name, while the step executes.
  • A variable defined for a job will override a workflow variable with the same name, while the job executes.

You need both to access secrets:

steps:
  - name: Hello world action
    with: # Set the secret as an input
      super_secret: ${{ secrets.SuperSecret }}
    env: # Or as an environment variable
      super_secret: ${{ secrets.SuperSecret }}
like image 23
VonC Avatar answered Oct 19 '22 04:10

VonC