mirror of
https://github.com/azure/login.git
synced 2026-03-15 09:20:56 -04:00
Compare commits
11 Commits
releases/v
...
sy/improve
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5c5b557200 | ||
|
|
2e05c531c4 | ||
|
|
2d52a1a40d | ||
|
|
e9468bad0a | ||
|
|
81e1d9f360 | ||
|
|
c847559275 | ||
|
|
332d569187 | ||
|
|
dcaef1266d | ||
|
|
3d449ed579 | ||
|
|
aeb0c3630a | ||
|
|
2d38cb8921 |
12
.github/workflows/azure-login-negative.yml
vendored
12
.github/workflows/azure-login-negative.yml
vendored
@@ -21,10 +21,10 @@ jobs:
|
|||||||
- name: 'Checking out repo code'
|
- name: 'Checking out repo code'
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set Node.js 16.x for GitHub Action
|
- name: Set Node.js 20.x for GitHub Action
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 16.x
|
node-version: 20.x
|
||||||
|
|
||||||
- name: 'Validate build'
|
- name: 'Validate build'
|
||||||
run: |
|
run: |
|
||||||
@@ -84,10 +84,10 @@ jobs:
|
|||||||
- name: 'Checking out repo code'
|
- name: 'Checking out repo code'
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set Node.js 16.x for GitHub Action
|
- name: Set Node.js 20.x for GitHub Action
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 16.x
|
node-version: 20.x
|
||||||
|
|
||||||
- name: 'Validate build'
|
- name: 'Validate build'
|
||||||
run: |
|
run: |
|
||||||
@@ -345,10 +345,10 @@ jobs:
|
|||||||
- name: 'Checking out repo code'
|
- name: 'Checking out repo code'
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set Node.js 16.x for GitHub Action
|
- name: Set Node.js 20.x for GitHub Action
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 16.x
|
node-version: 20.x
|
||||||
|
|
||||||
- name: 'Validate build'
|
- name: 'Validate build'
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
14
.github/workflows/azure-login-positive.yml
vendored
14
.github/workflows/azure-login-positive.yml
vendored
@@ -20,10 +20,10 @@ jobs:
|
|||||||
- name: 'Checking out repo code'
|
- name: 'Checking out repo code'
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set Node.js 16.x for GitHub Action
|
- name: Set Node.js 20.x for GitHub Action
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 16.x
|
node-version: 20.x
|
||||||
|
|
||||||
- name: 'Validate build'
|
- name: 'Validate build'
|
||||||
run: |
|
run: |
|
||||||
@@ -116,10 +116,10 @@ jobs:
|
|||||||
- name: 'Checking out repo code'
|
- name: 'Checking out repo code'
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set Node.js 16.x for GitHub Action
|
- name: Set Node.js 20.x for GitHub Action
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 16.x
|
node-version: 20.x
|
||||||
|
|
||||||
- name: 'Validate build'
|
- name: 'Validate build'
|
||||||
run: |
|
run: |
|
||||||
@@ -219,7 +219,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
azPSVersion: "latest"
|
azPSVersion: "latest"
|
||||||
inlineScript: |
|
inlineScript: |
|
||||||
$checkResult = (Get-AzContext -ListAvailable).Count -eq 2
|
$checkResult = (Get-AzContext).Environment.Name -eq 'AzureCloud'
|
||||||
if(-not $checkResult){
|
if(-not $checkResult){
|
||||||
throw "Not all checks passed!"
|
throw "Not all checks passed!"
|
||||||
}
|
}
|
||||||
@@ -256,10 +256,10 @@ jobs:
|
|||||||
- name: 'Checking out repo code'
|
- name: 'Checking out repo code'
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set Node.js 16.x for GitHub Action
|
- name: Set Node.js 20.x for GitHub Action
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 16.x
|
node-version: 20.x
|
||||||
|
|
||||||
- name: 'Validate build'
|
- name: 'Validate build'
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
6
.github/workflows/azure-login-pr-check.yml
vendored
6
.github/workflows/azure-login-pr-check.yml
vendored
@@ -16,11 +16,11 @@ jobs:
|
|||||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
ref: ${{ github.event.pull_request.head.ref }}
|
ref: ${{ github.event.pull_request.head.ref }}
|
||||||
|
|
||||||
# Using 16.x version as an example
|
# Using 20.x version as an example
|
||||||
- name: Set Node.js 16.x for GitHub Action
|
- name: Set Node.js 20.x for GitHub Action
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 16.x
|
node-version: 20.x
|
||||||
|
|
||||||
- name: installing node_modules
|
- name: installing node_modules
|
||||||
run: npm install
|
run: npm install
|
||||||
|
|||||||
6
.github/workflows/ci.yml
vendored
6
.github/workflows/ci.yml
vendored
@@ -20,16 +20,16 @@ jobs:
|
|||||||
- name: 'Checking out repo code'
|
- name: 'Checking out repo code'
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set Node.js 16.x for GitHub Action
|
- name: Set Node.js 20.x for GitHub Action
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 16.x
|
node-version: 20.x
|
||||||
|
|
||||||
- name: 'Validate build'
|
- name: 'Validate build'
|
||||||
run: |
|
run: |
|
||||||
npm install
|
npm install
|
||||||
npm run build
|
npm run build
|
||||||
|
|
||||||
- name: 'Run L0 tests'
|
- name: 'Run L0 tests'
|
||||||
run: |
|
run: |
|
||||||
npm run test
|
npm run test
|
||||||
|
|||||||
11
.github/workflows/codeql.yml
vendored
11
.github/workflows/codeql.yml
vendored
@@ -6,6 +6,11 @@ on:
|
|||||||
schedule:
|
schedule:
|
||||||
- cron: '0 19 * * 0'
|
- cron: '0 19 * * 0'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
CodeQL-Build:
|
CodeQL-Build:
|
||||||
|
|
||||||
@@ -18,14 +23,14 @@ jobs:
|
|||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v2
|
uses: github/codeql-action/init@v3
|
||||||
with:
|
with:
|
||||||
languages: javascript
|
languages: javascript
|
||||||
|
|
||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v2
|
uses: github/codeql-action/autobuild@v3
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 https://git.io/JvXDl
|
# 📚 https://git.io/JvXDl
|
||||||
@@ -39,4 +44,4 @@ jobs:
|
|||||||
# make release
|
# make release
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v2
|
uses: github/codeql-action/analyze@v3
|
||||||
|
|||||||
2
.github/workflows/markdownlint.yml
vendored
2
.github/workflows/markdownlint.yml
vendored
@@ -11,7 +11,7 @@ jobs:
|
|||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 16.x
|
node-version: 20.x
|
||||||
- name: Run Markdownlint
|
- name: Run Markdownlint
|
||||||
run: |
|
run: |
|
||||||
npm i -g markdownlint-cli2
|
npm i -g markdownlint-cli2
|
||||||
|
|||||||
45
README.md
45
README.md
@@ -19,7 +19,7 @@
|
|||||||
- [Login to Azure US Government cloud](#login-to-azure-us-government-cloud)
|
- [Login to Azure US Government cloud](#login-to-azure-us-government-cloud)
|
||||||
- [Login to Azure Stack Hub](#login-to-azure-stack-hub)
|
- [Login to Azure Stack Hub](#login-to-azure-stack-hub)
|
||||||
- [Login without subscription](#login-without-subscription)
|
- [Login without subscription](#login-without-subscription)
|
||||||
- [Az logout and security hardening](#az-logout-and-security-hardening)
|
- [Security hardening](#security-hardening)
|
||||||
- [Azure CLI dependency](#azure-cli-dependency)
|
- [Azure CLI dependency](#azure-cli-dependency)
|
||||||
- [Reference](#reference)
|
- [Reference](#reference)
|
||||||
- [GitHub Action](#github-action)
|
- [GitHub Action](#github-action)
|
||||||
@@ -190,7 +190,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Azure login
|
- name: Azure login
|
||||||
uses: azure/login@v1
|
uses: azure/login@v2
|
||||||
with:
|
with:
|
||||||
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
||||||
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
||||||
@@ -220,7 +220,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Azure login
|
- name: Azure login
|
||||||
uses: azure/login@v1
|
uses: azure/login@v2
|
||||||
with:
|
with:
|
||||||
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
||||||
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
||||||
@@ -282,7 +282,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- uses: azure/login@v1
|
- uses: azure/login@v2
|
||||||
with:
|
with:
|
||||||
creds: ${{ secrets.AZURE_CREDENTIALS }}
|
creds: ${{ secrets.AZURE_CREDENTIALS }}
|
||||||
|
|
||||||
@@ -310,7 +310,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- uses: azure/login@v1
|
- uses: azure/login@v2
|
||||||
with:
|
with:
|
||||||
creds: ${{ secrets.AZURE_CREDENTIALS }}
|
creds: ${{ secrets.AZURE_CREDENTIALS }}
|
||||||
enable-AzPSSession: true
|
enable-AzPSSession: true
|
||||||
@@ -333,7 +333,7 @@ jobs:
|
|||||||
If you want to pass subscription ID, tenant ID, client ID, and client secret as individual parameters instead of bundling them in a single JSON object to address the [security concerns](https://docs.github.com/actions/security-guides/encrypted-secrets), below snippet can help with the same.
|
If you want to pass subscription ID, tenant ID, client ID, and client secret as individual parameters instead of bundling them in a single JSON object to address the [security concerns](https://docs.github.com/actions/security-guides/encrypted-secrets), below snippet can help with the same.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: Azure/login@v1
|
- uses: azure/login@v2
|
||||||
with:
|
with:
|
||||||
creds: '{"clientId":"${{ secrets.AZURE_CLIENT_ID }}","clientSecret":"${{ secrets.AZURE_CLIENT_SECRET }}","subscriptionId":"${{ secrets.AZURE_SUBSCRIPTION_ID }}","tenantId":"${{ secrets.AZURE_TENANT_ID }}"}'
|
creds: '{"clientId":"${{ secrets.AZURE_CLIENT_ID }}","clientSecret":"${{ secrets.AZURE_CLIENT_SECRET }}","subscriptionId":"${{ secrets.AZURE_SUBSCRIPTION_ID }}","tenantId":"${{ secrets.AZURE_TENANT_ID }}"}'
|
||||||
```
|
```
|
||||||
@@ -377,7 +377,7 @@ jobs:
|
|||||||
runs-on: self-hosted
|
runs-on: self-hosted
|
||||||
steps:
|
steps:
|
||||||
- name: Azure login
|
- name: Azure login
|
||||||
uses: azure/login@v1
|
uses: azure/login@v2
|
||||||
with:
|
with:
|
||||||
auth-type: IDENTITY
|
auth-type: IDENTITY
|
||||||
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
||||||
@@ -443,7 +443,7 @@ jobs:
|
|||||||
runs-on: self-hosted
|
runs-on: self-hosted
|
||||||
steps:
|
steps:
|
||||||
- name: Azure login
|
- name: Azure login
|
||||||
uses: azure/login@v1
|
uses: azure/login@v2
|
||||||
with:
|
with:
|
||||||
auth-type: IDENTITY
|
auth-type: IDENTITY
|
||||||
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
||||||
@@ -483,7 +483,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- uses: azure/login@v1
|
- uses: azure/login@v2
|
||||||
with:
|
with:
|
||||||
creds: ${{ secrets.AZURE_CREDENTIALS }}
|
creds: ${{ secrets.AZURE_CREDENTIALS }}
|
||||||
environment: 'AzureUSGovernment'
|
environment: 'AzureUSGovernment'
|
||||||
@@ -506,7 +506,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- uses: azure/login@v1
|
- uses: azure/login@v2
|
||||||
with:
|
with:
|
||||||
creds: ${{ secrets.AZURE_CREDENTIALS }}
|
creds: ${{ secrets.AZURE_CREDENTIALS }}
|
||||||
environment: 'AzureStack'
|
environment: 'AzureStack'
|
||||||
@@ -534,7 +534,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Azure Login
|
- name: Azure Login
|
||||||
uses: azure/login@v1
|
uses: azure/login@v2
|
||||||
with:
|
with:
|
||||||
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
||||||
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
||||||
@@ -556,27 +556,10 @@ jobs:
|
|||||||
Get-AzContext
|
Get-AzContext
|
||||||
```
|
```
|
||||||
|
|
||||||
## Az logout and security hardening
|
## Security hardening
|
||||||
|
|
||||||
This action doesn't implement ```az logout``` by default at the end of execution. However, there is no way to tamper with the credentials or account information because the GitHub-hosted runner is on a VM that will get re-imaged for every customer run, which deletes everything. But if the runner is self-hosted (not provided by GitHub), it is recommended to manually log out at the end of the workflow, as shown below. More details on security of the runners can be found [here](https://docs.github.com/actions/learn-github-actions/security-hardening-for-github-actions#hardening-for-self-hosted-runners).
|
> [!WARNING]
|
||||||
|
> When using self hosted runners it is possible to have multiple runners on a single VM. Currently if your runners share a single user on the VM each runner will share the same credentials. That means in detail that each runner is able to change the permissions of another run. As a workaround we propose to use one single VM user per runner. If you start the runner as a service, do not forget to add the [optional user argument](https://docs.github.com/actions/hosting-your-own-runners/managing-self-hosted-runners/configuring-the-self-hosted-runner-application-as-a-service#installing-the-service)
|
||||||
```yaml
|
|
||||||
- name: Azure CLI script
|
|
||||||
uses: azure/CLI@v1
|
|
||||||
with:
|
|
||||||
inlineScript: |
|
|
||||||
az logout
|
|
||||||
az cache purge
|
|
||||||
az account clear
|
|
||||||
|
|
||||||
- name: Azure PowerShell script
|
|
||||||
uses: azure/powershell@v1
|
|
||||||
with:
|
|
||||||
azPSVersion: "latest"
|
|
||||||
inlineScript: |
|
|
||||||
Clear-AzContext -Scope Process
|
|
||||||
Clear-AzContext -Scope CurrentUser
|
|
||||||
```
|
|
||||||
|
|
||||||
## Azure CLI dependency
|
## Azure CLI dependency
|
||||||
|
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ describe("LoginConfig Test", () => {
|
|||||||
expect(loginConfig.servicePrincipalId).toBe("client-id");
|
expect(loginConfig.servicePrincipalId).toBe("client-id");
|
||||||
expect(loginConfig.servicePrincipalSecret).toBe("client-secret");
|
expect(loginConfig.servicePrincipalSecret).toBe("client-secret");
|
||||||
expect(loginConfig.tenantId).toBe("tenant-id");
|
expect(loginConfig.tenantId).toBe("tenant-id");
|
||||||
expect(loginConfig.subscriptionId).toBe("");
|
expect(loginConfig.subscriptionId).toBe(undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('initialize with creds', async () => {
|
test('initialize with creds', async () => {
|
||||||
|
|||||||
18
action.yml
18
action.yml
@@ -1,7 +1,7 @@
|
|||||||
# Login to Azure subscription
|
# Login to Azure subscription
|
||||||
name: 'Azure Login'
|
name: 'Azure Login'
|
||||||
description: 'Authenticate to Azure and run your Azure CLI or Azure PowerShell based actions or scripts.'
|
description: 'Authenticate to Azure and run your Azure CLI or Azure PowerShell based actions or scripts.'
|
||||||
inputs:
|
inputs:
|
||||||
creds:
|
creds:
|
||||||
description: 'Paste output of `az ad sp create-for-rbac` as value of secret variable: AZURE_CREDENTIALS'
|
description: 'Paste output of `az ad sp create-for-rbac` as value of secret variable: AZURE_CREDENTIALS'
|
||||||
required: false
|
required: false
|
||||||
@@ -14,7 +14,7 @@ inputs:
|
|||||||
subscription-id:
|
subscription-id:
|
||||||
description: 'Azure subscriptionId'
|
description: 'Azure subscriptionId'
|
||||||
required: false
|
required: false
|
||||||
enable-AzPSSession:
|
enable-AzPSSession:
|
||||||
description: 'Set this value to true to enable Azure PowerShell Login in addition to Azure CLI login'
|
description: 'Set this value to true to enable Azure PowerShell Login in addition to Azure CLI login'
|
||||||
required: false
|
required: false
|
||||||
default: false
|
default: false
|
||||||
@@ -27,18 +27,20 @@ inputs:
|
|||||||
required: false
|
required: false
|
||||||
default: false
|
default: false
|
||||||
audience:
|
audience:
|
||||||
description: 'Provide audience field for access-token. Default value is api://AzureADTokenExchange'
|
description: 'Provide audience field for access-token. Default value is api://AzureADTokenExchange'
|
||||||
required: false
|
required: false
|
||||||
default: 'api://AzureADTokenExchange'
|
default: 'api://AzureADTokenExchange'
|
||||||
auth-type:
|
auth-type:
|
||||||
description: 'The type of authentication. Supported values are SERVICE_PRINCIPAL, IDENTITY. Default value is SERVICE_PRINCIPAL'
|
description: 'The type of authentication. Supported values are SERVICE_PRINCIPAL, IDENTITY. Default value is SERVICE_PRINCIPAL'
|
||||||
required: false
|
required: false
|
||||||
default: 'SERVICE_PRINCIPAL'
|
default: 'SERVICE_PRINCIPAL'
|
||||||
branding:
|
branding:
|
||||||
icon: 'login.svg'
|
icon: 'login.svg'
|
||||||
color: 'blue'
|
color: 'blue'
|
||||||
runs:
|
runs:
|
||||||
using: 'node16'
|
using: 'node20'
|
||||||
pre: 'lib/cleanup.js'
|
pre: 'lib/cleanup/index.js'
|
||||||
main: 'lib/main.js'
|
pre-if: (! startsWith(runner.name, 'GitHub Actions'))
|
||||||
post: 'lib/cleanup.js'
|
main: 'lib/main/index.js'
|
||||||
|
post: 'lib/cleanup/index.js'
|
||||||
|
post-if: (! startsWith(runner.name, 'GitHub Actions'))
|
||||||
|
|||||||
4632
lib/cleanup/index.js
Normal file
4632
lib/cleanup/index.js
Normal file
File diff suppressed because it is too large
Load Diff
4911
lib/main/index.js
Normal file
4911
lib/main/index.js
Normal file
File diff suppressed because it is too large
Load Diff
4232
package-lock.json
generated
4232
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
16
package.json
16
package.json
@@ -1,17 +1,20 @@
|
|||||||
{
|
{
|
||||||
"name": "login",
|
"name": "login",
|
||||||
"version": "1.0.0",
|
"version": "2.0.0",
|
||||||
"description": "Login Azure wraps the az login, allowing for Azure actions to log into Azure",
|
"description": "Login Azure wraps the az login, allowing for Azure actions to log into Azure",
|
||||||
"main": "lib/main.js",
|
"main": "lib/main/index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc",
|
"build:main": "ncc build src/main.ts -o lib/main",
|
||||||
|
"build:cleanup": "ncc build src/cleanup.ts -o lib/cleanup",
|
||||||
|
"build": "npm run build:main && npm run build:cleanup",
|
||||||
"test": "jest"
|
"test": "jest"
|
||||||
},
|
},
|
||||||
"author": "Sumiran Aggarwal",
|
"author": "Microsoft",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^29.2.4",
|
"@types/jest": "^29.2.4",
|
||||||
"@types/node": "^12.7.11",
|
"@types/node": "^20.11.1",
|
||||||
|
"@vercel/ncc": "^0.38.1",
|
||||||
"jest": "^29.3.1",
|
"jest": "^29.3.1",
|
||||||
"jest-circus": "^29.3.1",
|
"jest-circus": "^29.3.1",
|
||||||
"ts-jest": "^29.0.3",
|
"ts-jest": "^29.0.3",
|
||||||
@@ -21,7 +24,6 @@
|
|||||||
"@actions/core": "1.9.1",
|
"@actions/core": "1.9.1",
|
||||||
"@actions/exec": "^1.0.1",
|
"@actions/exec": "^1.0.1",
|
||||||
"@actions/io": "^1.0.1",
|
"@actions/io": "^1.0.1",
|
||||||
"actions-secret-parser": "^1.0.4",
|
|
||||||
"package-lock": "^1.0.3"
|
"package-lock": "^1.0.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ async function cleanup() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
core.setFailed(`Login cleanup failed with ${error}. Make sure 'az' is installed on the runner. If 'enable-AzPSSession' is true, make sure 'pwsh' is installed on the runner together with Azure PowerShell module.`);
|
core.warning(`Login cleanup failed with ${error}. Cleanup will be skipped.`);
|
||||||
core.debug(error.stack);
|
core.debug(error.stack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import { FormatType, SecretParser } from 'actions-secret-parser';
|
|
||||||
|
|
||||||
export class LoginConfig {
|
export class LoginConfig {
|
||||||
static readonly AUTH_TYPE_SERVICE_PRINCIPAL = "SERVICE_PRINCIPAL";
|
static readonly AUTH_TYPE_SERVICE_PRINCIPAL = "SERVICE_PRINCIPAL";
|
||||||
@@ -49,10 +48,10 @@ export class LoginConfig {
|
|||||||
|
|
||||||
private readParametersFromCreds() {
|
private readParametersFromCreds() {
|
||||||
let creds = core.getInput('creds', { required: false });
|
let creds = core.getInput('creds', { required: false });
|
||||||
let secrets = creds ? new SecretParser(creds, FormatType.JSON) : null;
|
if (!creds) {
|
||||||
if (!secrets) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
let secrets = JSON.parse(creds);
|
||||||
|
|
||||||
if(this.authType != LoginConfig.AUTH_TYPE_SERVICE_PRINCIPAL){
|
if(this.authType != LoginConfig.AUTH_TYPE_SERVICE_PRINCIPAL){
|
||||||
return;
|
return;
|
||||||
@@ -64,11 +63,11 @@ export class LoginConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
core.debug('Reading creds in JSON...');
|
core.debug('Reading creds in JSON...');
|
||||||
this.servicePrincipalId = this.servicePrincipalId ? this.servicePrincipalId : secrets.getSecret("$.clientId", false);
|
this.servicePrincipalId = this.servicePrincipalId ? this.servicePrincipalId : secrets.clientId;
|
||||||
this.servicePrincipalSecret = secrets.getSecret("$.clientSecret", false);
|
this.servicePrincipalSecret = secrets.clientSecret;
|
||||||
this.tenantId = this.tenantId ? this.tenantId : secrets.getSecret("$.tenantId", false);
|
this.tenantId = this.tenantId ? this.tenantId : secrets.tenantId;
|
||||||
this.subscriptionId = this.subscriptionId ? this.subscriptionId : secrets.getSecret("$.subscriptionId", false);
|
this.subscriptionId = this.subscriptionId ? this.subscriptionId : secrets.subscriptionId;
|
||||||
this.resourceManagerEndpointUrl = secrets.getSecret("$.resourceManagerEndpointUrl", false);
|
this.resourceManagerEndpointUrl = secrets.resourceManagerEndpointUrl;
|
||||||
if (!this.servicePrincipalId || !this.servicePrincipalSecret || !this.tenantId) {
|
if (!this.servicePrincipalId || !this.servicePrincipalSecret || !this.tenantId) {
|
||||||
throw new Error("Not all parameters are provided in 'creds'. Double-check if all keys are defined in 'creds': 'clientId', 'clientSecret', 'tenantId'.");
|
throw new Error("Not all parameters are provided in 'creds'. Double-check if all keys are defined in 'creds': 'clientId', 'clientSecret', 'tenantId'.");
|
||||||
}
|
}
|
||||||
@@ -117,4 +116,3 @@ async function jwtParser(federatedToken: string) {
|
|||||||
let decodedPayload = JSON.parse(bufferObj.toString("utf8"));
|
let decodedPayload = JSON.parse(bufferObj.toString("utf8"));
|
||||||
return [decodedPayload['iss'], decodedPayload['sub']];
|
return [decodedPayload['iss'], decodedPayload['sub']];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,9 +13,6 @@ export function setUserAgent(): void {
|
|||||||
|
|
||||||
export async function cleanupAzCLIAccounts(): Promise<void> {
|
export async function cleanupAzCLIAccounts(): Promise<void> {
|
||||||
let azPath = await io.which("az", true);
|
let azPath = await io.which("az", true);
|
||||||
if (!azPath) {
|
|
||||||
throw new Error("Azure CLI is not found in the runner.");
|
|
||||||
}
|
|
||||||
core.debug(`Azure CLI path: ${azPath}`);
|
core.debug(`Azure CLI path: ${azPath}`);
|
||||||
core.info("Clearing azure cli accounts from the local cache.");
|
core.info("Clearing azure cli accounts from the local cache.");
|
||||||
await exec.exec(`"${azPath}"`, ["account", "clear"]);
|
await exec.exec(`"${azPath}"`, ["account", "clear"]);
|
||||||
@@ -23,9 +20,6 @@ export async function cleanupAzCLIAccounts(): Promise<void> {
|
|||||||
|
|
||||||
export async function cleanupAzPSAccounts(): Promise<void> {
|
export async function cleanupAzPSAccounts(): Promise<void> {
|
||||||
let psPath: string = await io.which(AzPSConstants.PowerShell_CmdName, true);
|
let psPath: string = await io.which(AzPSConstants.PowerShell_CmdName, true);
|
||||||
if (!psPath) {
|
|
||||||
throw new Error("PowerShell is not found in the runner.");
|
|
||||||
}
|
|
||||||
core.debug(`PowerShell path: ${psPath}`);
|
core.debug(`PowerShell path: ${psPath}`);
|
||||||
core.debug("Importing Azure PowerShell module.");
|
core.debug("Importing Azure PowerShell module.");
|
||||||
AzPSUtils.setPSModulePathForGitHubRunner();
|
AzPSUtils.setPSModulePathForGitHubRunner();
|
||||||
|
|||||||
Reference in New Issue
Block a user