I saw a lot of uses of :
jobs:
myjob:
steps:
- name: checkout
uses: "actions/checkout@something"
- ...
But i can not find what is the purpose of the line :
uses : "actions/checkout@something"
Is it similar to this ?
run: git checkout something
This action checks-out your repository under $GITHUB_WORKSPACE , so your workflow can access it. Only a single commit is fetched by default, for the ref/SHA that triggered the workflow. Set fetch-depth: 0 to fetch all history for all branches and tags.
Checkout is the command used to switch between the different branches of a GitHub repository. When a branch is checked out, all files in the working directory are updated to match the versions stored in that branch.
Actions are individual tasks that you can combine to create jobs and customize your workflow. You can create your own actions, or use and customize actions shared by the GitHub community.
For this line: uses : "actions/checkout@something"
, it will use the actions/checkout
github action (source here) with the ref something
. This ref only refers to the github action version (nothing to do with your repo)
The uses
statement refers to a github action that is being used in this step. From github documentation for jobs.<job_id>.steps[*].uses
:
Selects an action to run as part of a step in your job. An action is a reusable unit of code. You can use an action defined in the same repository as the workflow, a public repository, or in a published Docker container image.
From actions/checkout readme :
This action checks-out your repository under $GITHUB_WORKSPACE, so your workflow can access it.
By default it checks out only one commit. My understanding is that it's doing something similar to:
git fetch --depth 1 origin $GITHUB_REF
This action also persists an auth token in git config. This way, your workflow can run authenticated git commands
By default, it clones your current repository ({{ github.repository }}
) but you can also use this action to clone a different repository, and specify additionnal parameters like token
, branch
, path
etc...
An example with additionnal input parameters: check out all git history by setting fetch-depth
to 0
(default is 1
), see usage doc:
- uses: actions/checkout@v2
with:
fetch-depth: 0
Understanding terminologies made things clearer
Side Note: When git fetch is used, a custom branch is created locally in the form "origin/name_of_branch", changes on this branch can be viewed locally. These changes are the updated version of the files, not the specific change in that file as seen when commits are being inspected on GitHub.
Back to the question When the action is executed
jobs:
myjob:
steps:
- name: checkout
uses: "actions/checkout@something"
- ...
The default steps being executed are:
The current repo in which the workflow is being triggered gets cloned.
Depending on the defined events such as a push or pull request:
git fetch --depth 1 $GITHUB_REF
Environment variables being referenced in the commands are explained here. Additional options can be added to implement specific processes or scenarios such as checking out a different branch. This can be found in the official repo readme.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With