Skip to content

Repository files navigation

GitHub releaseGitHub marketplaceCI workflowTest workflowCodecov

About

GitHub Action to login against a Docker registry.

Screenshot


Usage

Docker Hub

To authenticate against Docker Hub it's strongly recommended to create a personal access token as an alternative to your password.

name: cion:
push:
branches: mainjobs:
login:
runs-on: ubuntu-lateststeps:
-
name: Login to Docker Hubuses: docker/login-action@v2with:
username: ${{ secrets.DOCKERHUB_USERNAME }}password: ${{ secrets.DOCKERHUB_TOKEN }}

GitHub Container Registry

To authenticate against the GitHub Container Registry, use the GITHUB_TOKEN for the best security and experience.

name: cion:
push:
branches: mainjobs:
login:
runs-on: ubuntu-lateststeps:
-
name: Login to GitHub Container Registryuses: docker/login-action@v2with:
registry: ghcr.iousername: ${{ github.actor }}password: ${{ secrets.GITHUB_TOKEN }}

You may need to manage write and read access of GitHub Actions for repositories in the container settings.

You can also use a personal access token (PAT) with the appropriate scopes.

GitLab

name: cion:
push:
branches: mainjobs:
login:
runs-on: ubuntu-lateststeps:
-
name: Login to GitLabuses: docker/login-action@v2with:
registry: registry.gitlab.comusername: ${{ secrets.GITLAB_USERNAME }}password: ${{ secrets.GITLAB_PASSWORD }}

Azure Container Registry (ACR)

Create a service principal with access to your container registry through the Azure CLI and take note of the generated service principal's ID (also called client ID) and password (also called client secret).

name: cion:
push:
branches: mainjobs:
login:
runs-on: ubuntu-lateststeps:
-
name: Login to ACRuses: docker/login-action@v2with:
registry: <registry-name>.azurecr.iousername: ${{ secrets.AZURE_CLIENT_ID }}password: ${{ secrets.AZURE_CLIENT_SECRET }}

Replace <registry-name> with the name of your registry.

Google Container Registry (GCR)

Google Artifact Registry is the evolution of Google Container Registry. As a fully-managed service with support for both container images and non-container artifacts. If you currently use Google Container Registry, use the information on this page to learn about transitioning to Google Artifact Registry.

You can use either workload identity federation based keyless authentication or service account based authentication.

Workload identity federation based authentication

Configure the workload identity federation for github actions in gcloud (for steps, refer here). In the steps, your service account should the ability to push to GCR. Then use google-github-actions/auth action for authentication using workload identity like below:

name: cion:
push:
branches: mainjobs:
login:
runs-on: ubuntu-lateststeps:
- id: 'auth'name: 'Authenticate to Google Cloud'uses: 'google-github-actions/auth@v0'with:
token_format: 'access_token'workload_identity_provider: '<workload_identity_provider>'service_account: '<service_account>'
- name: Login to GCRuses: docker/login-action@v2with:
registry: gcr.iousername: oauth2accesstokenpassword: ${{ steps.auth.outputs.access_token }}

Replace <workload_identity_provider> with configured workload identity provider. For steps to configure, refer here.

Replace <service_account> with configured service account in workload identity provider which has access to push to GCR

Service account based authentication

Use a service account with the ability to push to GCR and configure access control. Then create and download the JSON key for this service account and save content of .json file as a secret called GCR_JSON_KEY in your GitHub repo. Ensure you set the username to _json_key, or _json_key_base64 if you use a base64-encoded key.

name: cion:
push:
branches: mainjobs:
login:
runs-on: ubuntu-lateststeps:
-
name: Login to GCRuses: docker/login-action@v2with:
registry: gcr.iousername: _json_keypassword: ${{ secrets.GCR_JSON_KEY }}

Google Artifact Registry (GAR)

You can use either workload identity federation based keyless authentication or service account based authentication.

Workload identity federation based authentication

Configure the workload identity federation for github actions in gcloud (for steps, refer here). In the steps, your service account should the ability to push to GAR. Then use google-github-actions/auth action for authentication using workload identity like below:

name: cion:
push:
branches: mainjobs:
login:
runs-on: ubuntu-lateststeps:
- id: 'auth'name: 'Authenticate to Google Cloud'uses: 'google-github-actions/auth@v0'with:
token_format: 'access_token'workload_identity_provider: '<workload_identity_provider>'service_account: '<service_account>'
- name: Login to GARuses: docker/login-action@v2with:
registry: <location>-docker.pkg.devusername: oauth2accesstokenpassword: ${{ steps.auth.outputs.access_token }}

Replace <workload_identity_provider> with configured workload identity provider

Replace <service_account> with configured service account in workload identity provider which has access to push to GCR

Replace <location> with the regional or multi-regional location of the repository where the image is stored.

Service account based authentication

Use a service account with the ability to push to GAR and configure access control. Then create and download the JSON key for this service account and save content of .json file as a secret called GAR_JSON_KEY in your GitHub repo. Ensure you set the username to _json_key, or _json_key_base64 if you use a base64-encoded key.

name: cion:
push:
branches: mainjobs:
login:
runs-on: ubuntu-lateststeps:
-
name: Login to GARuses: docker/login-action@v2with:
registry: <location>-docker.pkg.devusername: _json_keypassword: ${{ secrets.GAR_JSON_KEY }}

Replace <location> with the regional or multi-regional location of the repository where the image is stored.

AWS Elastic Container Registry (ECR)

Use an IAM user with the ability to push to ECR with AmazonEC2ContainerRegistryPowerUser managed policy for example. Then create and download access keys and save AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEYas secrets in your GitHub repo.

name: cion:
push:
branches: mainjobs:
login:
runs-on: ubuntu-lateststeps:
-
name: Login to ECRuses: docker/login-action@v2with:
registry: <aws-account-number>.dkr.ecr.<region>.amazonaws.comusername: ${{ secrets.AWS_ACCESS_KEY_ID }}password: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

If you need to log in to Amazon ECR registries associated with other accounts, you can use the AWS_ACCOUNT_IDS environment variable:

name: cion:
push:
branches: mainjobs:
login:
runs-on: ubuntu-lateststeps:
-
name: Login to ECRuses: docker/login-action@v2with:
registry: <aws-account-number>.dkr.ecr.<region>.amazonaws.comusername: ${{ secrets.AWS_ACCESS_KEY_ID }}password: ${{ secrets.AWS_SECRET_ACCESS_KEY }}env:
AWS_ACCOUNT_IDS: 012345678910,023456789012

Only available with AWS CLI version 1

You can also use the Configure AWS Credentials action in combination with this action:

name: cion:
push:
branches: mainjobs:
login:
runs-on: ubuntu-lateststeps:
-
name: Configure AWS Credentialsuses: aws-actions/configure-aws-credentials@v1with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}aws-region: <region>
-
name: Login to ECRuses: docker/login-action@v2with:
registry: <aws-account-number>.dkr.ecr.<region>.amazonaws.com

Replace <aws-account-number> and <region> with their respective values.

AWS Public Elastic Container Registry (ECR)

Use an IAM user with the ability to push to ECR Public with AmazonElasticContainerRegistryPublicPowerUser managed policy for example. Then create and download access keys and save AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEYas secrets in your GitHub repo.

name: cion:
push:
branches: mainjobs:
login:
runs-on: ubuntu-lateststeps:
-
name: Login to Public ECRuses: docker/login-action@v2with:
registry: public.ecr.awsusername: ${{ secrets.AWS_ACCESS_KEY_ID }}password: ${{ secrets.AWS_SECRET_ACCESS_KEY }}env:
AWS_REGION: <region>

Replace <region> with its respective value (default us-east-1).

OCI Oracle Cloud Infrastructure Registry (OCIR)

To push into OCIR in specific tenancy the username must be placed in format <tenancy>/<username> (in case of federated tenancy use the format <tenancy-namespace>/oracleidentitycloudservice/<username>).

For password create an auth token. Save username and token as a secrets in your GitHub repo.

name: cion:
push:
branches: mainjobs:
login:
runs-on: ubuntu-lateststeps:
-
name: Login to OCIRuses: docker/login-action@v2with:
registry: <region>.ocir.iousername: ${{ secrets.OCI_USERNAME }}password: ${{ secrets.OCI_TOKEN }}

Replace <region> with their respective values from availability regions

Quay.io

Use a Robot account with the ability to push to a public/private Quay.io repository.

name: cion:
push:
branches: mainjobs:
login:
runs-on: ubuntu-lateststeps:
-
name: Login to Quay.iouses: docker/login-action@v2with:
registry: quay.iousername: ${{ secrets.QUAY_USERNAME }}password: ${{ secrets.QUAY_ROBOT_TOKEN }}

Customizing

inputs

Following inputs can be used as step.with keys

NameTypeDefaultDescription
registryStringServer address of Docker registry. If not set then will default to Docker Hub
usernameStringUsername used to log against the Docker registry
passwordStringPassword or personal access token used to log against the Docker registry
ecrStringautoSpecifies whether the given registry is ECR (auto, true or false)
logoutBooltrueLog out from the Docker registry at the end of a job

Keep up-to-date with GitHub Dependabot

Since Dependabot has native GitHub Actions support, to enable it on your GitHub repo all you need to do is add the .github/dependabot.yml file:

version: 2updates:
# Maintain dependencies for GitHub Actions
- package-ecosystem: "github-actions"directory: "/"schedule:
interval: "daily"

About

GitHub Action to login against a Docker registry

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages