Compare commits

..

5 Commits

Author SHA1 Message Date
Oliver King 2ffb4da395 Add node modules and compiled JavaScript from main 2023-01-27 19:51:42 +00:00
Oliver King cbdd016f5e Merge branch 'releases/v3' into tmp 2023-01-27 19:51:13 +00:00
github-actions[bot] d1462f8502 v3 new release (#76)
* fix broken build - switch to ncc build (#56)

* switch to ncc build

* update

* bump ncc

* Vidya reddy/vercel ncc (#58)

* updated action file with node16

* Code consistency using prettier and its workflow

* Enforce Prettier

* code fix

* code fix

* code fix

* add vercel/ncc to build script

* modified action file

Co-authored-by: Vidya Reddy <vidyareddy@microsoft.com>

* Bump @actions/core from 1.2.6 to 1.9.1 (#62)

Bumps [@actions/core](https://github.com/actions/toolkit/tree/HEAD/packages/core) from 1.2.6 to 1.9.1.
- [Release notes](https://github.com/actions/toolkit/releases)
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/core/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/core)

---
updated-dependencies:
- dependency-name: "@actions/core"
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Added the bug report and feature request form (#63)

* Added the bug report and feature request form

* updated the url

* Systax error fixes (#64)

* Bump jose from 2.0.5 to 2.0.6 (#65)

Bumps [jose](https://github.com/panva/jose) from 2.0.5 to 2.0.6.
- [Release notes](https://github.com/panva/jose/releases)
- [Changelog](https://github.com/panva/jose/blob/v2.0.6/CHANGELOG.md)
- [Commits](https://github.com/panva/jose/compare/v2.0.5...v2.0.6)

---
updated-dependencies:
- dependency-name: jose
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Update @actions/core (#68)

to address https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

* Bump qs from 6.5.2 to 6.5.3 (#73)

Bumps [qs](https://github.com/ljharb/qs) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/ljharb/qs/releases)
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.5.2...v6.5.3)

---
updated-dependencies:
- dependency-name: qs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Update README with v3 version (#72)

* Bump json5 from 2.2.1 to 2.2.3 (#75)

Bumps [json5](https://github.com/json5/json5) from 2.2.1 to 2.2.3.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v2.2.1...v2.2.3)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump minimatch from 3.0.4 to 3.1.2 (#74)

Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.0.4 to 3.1.2.
- [Release notes](https://github.com/isaacs/minimatch/releases)
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.0.4...v3.1.2)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Add node modules and compiled JavaScript from main

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: David Gamero <david340804@gmail.com>
Co-authored-by: Vidya Reddy <59590642+Vidya2606@users.noreply.github.com>
Co-authored-by: Vidya Reddy <vidyareddy@microsoft.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Sumner Warren <sumner.warren@gmail.com>
Co-authored-by: Oliver King <oking3@uncc.edu>
2023-01-26 14:26:18 -05:00
github-actions[bot] 8128997447 v3 new release (#57)
* fix broken build - switch to ncc build (#56)

* switch to ncc build

* update

* bump ncc

* Add node modules and compiled JavaScript from main

Co-authored-by: David Gamero <david340804@gmail.com>
Co-authored-by: Oliver King <oking3@uncc.edu>
2022-06-30 17:56:12 -04:00
github-actions[bot] 52d71d28bd Add node modules and compiled JavaScript from main (#54)
Co-authored-by: Oliver King <oking3@uncc.edu>
2022-06-29 15:41:55 -04:00
33 changed files with 199649 additions and 3381 deletions
+1 -1
View File
@@ -1 +1 @@
* @Azure/cloud-native-github-action-owners
* @Azure/aks-atlanta
-18
View File
@@ -1,18 +0,0 @@
version: 2
updates:
- package-ecosystem: npm
directory: /
schedule:
interval: weekly
groups:
actions:
patterns:
- '*'
- package-ecosystem: github-actions
directory: .github/workflows
schedule:
interval: weekly
groups:
actions:
patterns:
- '*'
-91
View File
@@ -1,91 +0,0 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: 'CodeQL Advanced'
on:
push:
branches: ['main']
pull_request:
branches: ['main']
schedule:
- cron: '15 9 * * 0'
jobs:
analyze:
name: Analyze (${{ matrix.language }})
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
permissions:
# required for all workflows
security-events: write
# required to fetch internal or private CodeQL packs
packages: read
# only required for workflows in private repositories
actions: read
contents: read
strategy:
fail-fast: false
matrix:
include:
- language: javascript-typescript
build-mode: none
# CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
# Use `c-cpp` to analyze code written in C, C++ or both
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@89a39a4e59826350b863aa6b6252a07ad50cf83e # v3.29.5
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# If the analyze step fails for one of the languages you are analyzing with
# "We were unable to automatically build your code", modify the matrix above
# to set the build mode to "manual" for that language. Then modify this step
# to build your code.
# ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- if: matrix.build-mode == 'manual'
shell: bash
run: |
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
echo ' make bootstrap'
echo ' make release'
exit 1
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@89a39a4e59826350b863aa6b6252a07ad50cf83e # v3.29.5
with:
category: '/language:${{matrix.language}}'
+2 -2
View File
@@ -13,7 +13,7 @@ jobs:
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0
- uses: actions/stale@v3
name: Setting Issue as Idle
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
@@ -24,7 +24,7 @@ jobs:
operations-per-run: 100
exempt-issue-labels: 'backlog'
- uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0
- uses: actions/stale@v3
name: Setting PR as Idle
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
steps:
- name: Checkout Source Code
id: checkout-code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@v2
- name: Npm Install and Build
id: npm-build
run: |
+5 -12
View File
@@ -1,4 +1,4 @@
name: 'Run Prettify'
name: 'Run prettify'
on:
pull_request:
push:
@@ -10,16 +10,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
- name: Enforce Prettier
uses: actionsx/prettier@v2
with:
node-version: 'lts/*'
cache: 'npm'
- name: Install Dependencies
run: npm ci
- name: Run Prettier Check
run: npx prettier --check .
args: --check .
+8 -12
View File
@@ -1,18 +1,14 @@
name: Release Project
name: Create release PR
on:
push:
branches:
- main
paths:
- CHANGELOG.md
workflow_dispatch:
inputs:
release:
description: 'Define release version (ex: v1, v2, v3)'
required: true
jobs:
release:
permissions:
actions: read
contents: write
uses: Azure/action-release-workflows/.github/workflows/release_js_project.yaml@v1
release-pr:
uses: OliverMKing/javascript-release-workflow/.github/workflows/release-pr.yml@main
with:
changelogPath: ./CHANGELOG.md
release: ${{ github.event.inputs.release }}
+1 -1
View File
@@ -13,7 +13,7 @@ jobs:
unit-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/checkout@v1
- name: Run Unit Tests
run: |
npm install
-1
View File
@@ -331,4 +331,3 @@ node_modules
coverage
# Transpiled JS
lib/
-7
View File
@@ -1,7 +0,0 @@
npm test
npm run format-check || {
echo ""
echo "❌ Formatting check failed."
echo "💡 Run 'npm run format' or 'prettier --write .' to fix formatting issues."
exit 1
}
-15
View File
@@ -1,15 +0,0 @@
# Change Log
## [4.0.2] - 2025-11-13
- #[164](https://github.com/Azure/k8s-set-context/pull/164) Adding optional kubeconfig encoding variable
- Dependabot updates
## [4.0.1] - 2024-09-06
- #90 update dev dependencies with Typescript to 5
- #89 Adding dependabot
## [4.0.0] - 2024-02-13
- #83 update to node20 as node16 is deprecated
+4 -8
View File
@@ -19,7 +19,7 @@ Refer to the [action metadata file](./action.yml) for details about inputs. Note
### Kubeconfig approach
```yaml
- uses: azure/k8s-set-context@v4
- uses: azure/k8s-set-context@v3
with:
method: kubeconfig
kubeconfig: <your kubeconfig>
@@ -50,7 +50,7 @@ Please refer to documentation on fetching [kubeconfig for any generic K8s cluste
### Service account approach
```yaml
- uses: azure/k8s-set-context@v4
- uses: azure/k8s-set-context@v3
with:
method: service-account
k8s-url: <URL of the cluster's API server>
@@ -74,7 +74,7 @@ kubectl get secret <service-account-secret-name> -n <namespace> -o yaml
### Service account approach for arc cluster
```yaml
- uses: azure/k8s-set-context@v4
- uses: azure/k8s-set-context@v3
with:
method: service-account
cluster-type: arc
@@ -86,7 +86,7 @@ kubectl get secret <service-account-secret-name> -n <namespace> -o yaml
### Service principal approach for arc cluster
```yaml
- uses: azure/k8s-set-context@v4
- uses: azure/k8s-set-context@v3
with:
method: service-principal
cluster-type: arc
@@ -107,7 +107,3 @@ provided by the bot. You will only need to do this once across all repos using o
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
### Local development
Use `npm run build` to bundle the action with esbuild (output is `lib/index.cjs`, referenced by `action.yml`) and `npm run test` to execute the Vitest suite, including an integration test that runs the built action.
+2 -6
View File
@@ -13,10 +13,6 @@ inputs:
kubeconfig:
description: 'Contents of kubeconfig file'
required: false
kubeconfig-encoding:
description: 'Encoding of the kubeconfig input. Accepts "plaintext" (default) or "base64".'
required: false
default: 'plaintext'
context:
description: 'If your kubeconfig has multiple contexts, use this field to use a specific context, otherwise the default one would be chosen'
required: false
@@ -39,5 +35,5 @@ inputs:
branding:
color: 'blue'
runs:
using: 'node20'
main: 'lib/index.cjs'
using: 'node16'
main: 'lib/index.js'
+20
View File
@@ -0,0 +1,20 @@
module.exports = {
restoreMocks: true,
clearMocks: true,
resetMocks: true,
moduleFileExtensions: ['js', 'ts'],
testEnvironment: 'node',
testMatch: ['**/*.test.ts'],
transform: {
'^.+\\.ts$': 'ts-jest'
},
verbose: true,
coverageThreshold: {
global: {
branches: 0,
functions: 40,
lines: 22,
statements: 22
}
}
}
+39
View File
@@ -0,0 +1,39 @@
if (require.main !== module) {
throw new Error('This file should not be required');
}
var childProcess = require('child_process');
var fs = require('fs');
var paramFilePath = process.argv[2];
var serializedParams = fs.readFileSync(paramFilePath, 'utf8');
var params = JSON.parse(serializedParams);
var cmd = params.command;
var execOptions = params.execOptions;
var pipe = params.pipe;
var stdoutFile = params.stdoutFile;
var stderrFile = params.stderrFile;
var c = childProcess.exec(cmd, execOptions, function (err) {
if (!err) {
process.exitCode = 0;
} else if (err.code === undefined) {
process.exitCode = 1;
} else {
process.exitCode = err.code;
}
});
var stdoutStream = fs.createWriteStream(stdoutFile);
var stderrStream = fs.createWriteStream(stderrFile);
c.stdout.pipe(stdoutStream);
c.stderr.pipe(stderrStream);
c.stdout.pipe(process.stdout);
c.stderr.pipe(process.stderr);
if (pipe) {
c.stdin.end(pipe);
}
+192074
View File
File diff suppressed because one or more lines are too long
+7436 -2974
View File
File diff suppressed because it is too large Load Diff
+19 -21
View File
@@ -1,16 +1,14 @@
{
"name": "k8s-set-context-action",
"version": "4.0.2",
"version": "1.0.0",
"private": true,
"main": "lib/index.cjs",
"type": "module",
"main": "lib/index.js",
"scripts": {
"build": "tsc --noEmit && node ./scripts/build.mjs",
"test": "vitest run",
"test-coverage": "vitest run --coverage",
"build": "ncc build src/run.ts -o lib",
"test": "jest",
"test-coverage": "jest --coverage",
"format": "prettier --write .",
"format-check": "prettier --check .",
"prepare": "husky"
"format-check": "prettier --check ."
},
"keywords": [
"actions",
@@ -20,20 +18,20 @@
"author": "GitHub",
"license": "MIT",
"dependencies": {
"@actions/core": "^2.0.2",
"@actions/exec": "^2.0.0",
"@actions/io": "^2.0.0",
"@kubernetes/client-node": "^1.4.0",
"husky": "^9.1.7",
"js-yaml": "^4.1.1"
"@actions/core": "^1.10.0",
"@actions/exec": "^1.0.0",
"@actions/io": "^1.1.2",
"@kubernetes/client-node": "^0.16.0",
"js-yaml": "^4.1.0"
},
"devDependencies": {
"@types/js-yaml": "^4.0.9",
"@types/node": "^25.0.9",
"@vitest/coverage-v8": "^2.0.4",
"esbuild": "^0.24.0",
"prettier": "^3.8.0",
"typescript": "^5.9.3",
"vitest": "^2.0.4"
"@types/jest": "^28.1.2",
"@types/js-yaml": "^4.0.4",
"@types/node": "^16.0.0",
"@vercel/ncc": "^0.34.0",
"jest": "^28.1.1",
"prettier": "2.7.1",
"ts-jest": "^28.0.5",
"typescript": "4.7.4"
}
}
-26
View File
@@ -1,26 +0,0 @@
#!/usr/bin/env node
import {build} from 'esbuild'
import {mkdir} from 'fs/promises'
import {dirname} from 'path'
const outFile = 'lib/index.cjs'
const main = async () => {
await mkdir(dirname(outFile), {recursive: true})
await build({
entryPoints: ['src/run.ts'],
bundle: true,
platform: 'node',
target: 'node20',
format: 'cjs',
sourcemap: true,
outfile: outFile,
legalComments: 'none'
})
}
main().catch((err) => {
console.error(err)
process.exit(1)
})
+12 -38
View File
@@ -1,56 +1,30 @@
import {getRequiredInputError} from '../tests/util'
import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest'
import {run} from './action'
import * as fs from 'fs'
import * as path from 'path'
import os from 'os'
import fs from 'fs'
import * as utils from './utils'
import * as core from '@actions/core'
describe('Run', () => {
const initialEnv = {...process.env}
const tempDirs: string[] = []
beforeEach(() => {
vi.restoreAllMocks()
process.env = {...initialEnv}
vi.spyOn(core, 'warning').mockImplementation(() => {})
vi.spyOn(core, 'debug').mockImplementation(() => {})
})
afterEach(() => {
tempDirs.forEach((dir) => {
try {
fs.rmSync(dir, {recursive: true, force: true})
} catch {}
})
tempDirs.length = 0
})
it('throws error without cluster type', async () => {
await expect(run()).rejects.toThrow(getRequiredInputError('cluster-type'))
})
it('writes kubeconfig and sets context', async () => {
const kubeconfig = 'kubeconfig'
const fixedTimestamp = 42
process.env['INPUT_CLUSTER-TYPE'] = 'default'
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kubeconfig-test-'))
tempDirs.push(tmpDir)
process.env['RUNNER_TEMP'] = tmpDir
process.env['RUNNER_TEMP'] = '/sample/path'
vi.spyOn(Date, 'now').mockReturnValue(fixedTimestamp)
vi.spyOn(utils, 'getKubeconfig').mockResolvedValue(kubeconfig)
vi.spyOn(utils, 'setContext').mockImplementation(() => kubeconfig)
jest
.spyOn(utils, 'getKubeconfig')
.mockImplementation(async () => kubeconfig)
jest.spyOn(fs, 'writeFileSync').mockImplementation(() => {})
jest.spyOn(fs, 'chmodSync').mockImplementation(() => {})
jest.spyOn(utils, 'setContext').mockImplementation(() => kubeconfig)
await expect(run()).resolves.toBeUndefined()
const outputPath = path.join(tmpDir, `kubeconfig_${fixedTimestamp}`)
expect(fs.existsSync(outputPath)).toBe(true)
expect(fs.readFileSync(outputPath, 'utf-8')).toBe(kubeconfig)
expect(process.env['KUBECONFIG']).toBe(outputPath)
expect(await run())
expect(utils.getKubeconfig).toHaveBeenCalled()
expect(utils.setContext).toHaveBeenCalledWith(kubeconfig)
expect(fs.writeFileSync).toHaveBeenCalled()
expect(fs.chmodSync).toHaveBeenCalled()
expect(utils.setContext).toHaveBeenCalled()
})
})
+5 -13
View File
@@ -1,5 +1,3 @@
import {beforeEach, describe, expect, it, test, vi} from 'vitest'
import * as core from '@actions/core'
import * as actions from '@actions/exec'
import * as io from '@actions/io'
import {getRequiredInputError} from '../../tests/util'
@@ -7,12 +5,6 @@ import {getArcKubeconfig, KUBECONFIG_LOCATION} from './arc'
import * as az from './azCommands'
describe('Arc kubeconfig', () => {
beforeEach(() => {
vi.restoreAllMocks()
vi.spyOn(core, 'warning').mockImplementation(() => {})
vi.spyOn(core, 'debug').mockImplementation(() => {})
})
test('it throws error without resource group', async () => {
await expect(getArcKubeconfig()).rejects.toThrow(
getRequiredInputError('resource-group')
@@ -36,11 +28,11 @@ describe('Arc kubeconfig', () => {
process.env['INPUT_RESOURCE-GROUP'] = group
process.env['INPUT_CLUSTER-NAME'] = name
vi.spyOn(io, 'which').mockResolvedValue(path)
vi.spyOn(az, 'runAzCliCommand').mockResolvedValue()
vi.spyOn(az, 'runAzKubeconfigCommandBlocking').mockResolvedValue(
kubeconfig
)
jest.spyOn(io, 'which').mockImplementation(async () => path)
jest.spyOn(az, 'runAzCliCommand').mockImplementation(async () => {})
jest
.spyOn(az, 'runAzKubeconfigCommandBlocking')
.mockImplementation(async () => kubeconfig)
})
it('throws an error without method', async () => {
+2 -5
View File
@@ -1,17 +1,14 @@
import {describe, expect, test, vi} from 'vitest'
import * as core from '@actions/core'
import * as actions from '@actions/exec'
import {runAzCliCommand} from './azCommands'
describe('Az commands', () => {
test('it runs an az cli command', async () => {
vi.spyOn(core, 'debug').mockImplementation(() => {})
const path = 'path'
const args = ['args']
vi.spyOn(actions, 'exec').mockResolvedValue(0)
jest.spyOn(actions, 'exec').mockImplementation(async () => 0)
expect(await runAzCliCommand(path, args))
expect(actions.exec).toHaveBeenCalledWith(path, args, {})
expect(actions.exec).toBeCalledWith(path, args, {})
})
})
-55
View File
@@ -1,22 +1,8 @@
import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'
import * as fs from 'fs'
import * as core from '@actions/core'
import {getRequiredInputError} from '../../tests/util'
import {createKubeconfig, getDefaultKubeconfig} from './default'
describe('Default kubeconfig', () => {
const originalEnv = {...process.env}
beforeEach(() => {
vi.restoreAllMocks()
vi.spyOn(core, 'warning').mockImplementation(() => {})
vi.spyOn(core, 'debug').mockImplementation(() => {})
})
afterEach(() => {
process.env = {...originalEnv}
})
test('it creates a kubeconfig with proper format', () => {
const certAuth = 'certAuth'
const token = 'token'
@@ -76,47 +62,6 @@ describe('Default kubeconfig', () => {
expect(getDefaultKubeconfig()).toBe(kc)
})
test('returns kubeconfig as plaintext when encoding is plaintext', () => {
const kc = 'example kc'
vi.spyOn(core, 'getInput').mockImplementation((name: string) => {
if (name === 'method') return 'default'
if (name === 'kubeconfig-encoding') return 'plaintext'
if (name === 'kubeconfig') return kc
return ''
})
expect(getDefaultKubeconfig()).toBe(kc)
})
test('it gets default config through base64 kubeconfig input', () => {
const kc = 'example kc'
const base64Kc = Buffer.from(kc, 'utf-8').toString('base64')
vi.spyOn(core, 'getInput').mockImplementation((name: string) => {
if (name === 'method') return 'default'
if (name === 'kubeconfig-encoding') return 'base64'
if (name === 'kubeconfig') return base64Kc
return ''
})
expect(getDefaultKubeconfig()).toBe(kc)
})
test('it throws error for unknown kubeconfig-encoding', () => {
const kc = 'example kc'
const unknownEncoding = 'foobar'
vi.spyOn(core, 'getInput').mockImplementation((name: string) => {
if (name === 'method') return 'default'
if (name === 'kubeconfig-encoding') return unknownEncoding
if (name === 'kubeconfig') return kc
return ''
})
expect(() => getDefaultKubeconfig()).toThrow(
"Invalid kubeconfig-encoding: 'foobar'. Must be 'plaintext' or 'base64'."
)
})
})
test('it defaults to default method', () => {
+1 -21
View File
@@ -44,27 +44,7 @@ export function getDefaultKubeconfig(): string {
}
default: {
core.debug('Setting context using kubeconfig')
enum Encoding {
Base64 = 'base64',
Plaintext = 'plaintext'
}
const rawKubeconfig = core.getInput('kubeconfig', {required: true})
const encoding =
core.getInput('kubeconfig-encoding')?.toLowerCase() ||
Encoding.Plaintext
if (encoding !== Encoding.Base64 && encoding !== Encoding.Plaintext) {
throw new Error(
`Invalid kubeconfig-encoding: '${encoding}'. Must be 'plaintext' or 'base64'.`
)
}
const kubeconfig =
encoding === Encoding.Base64
? Buffer.from(rawKubeconfig, 'base64').toString('utf-8')
: rawKubeconfig
return kubeconfig
return core.getInput('kubeconfig', {required: true})
}
}
}
-1
View File
@@ -1,4 +1,3 @@
import {describe, expect, test} from 'vitest'
import {Cluster, parseCluster} from './cluster'
describe('Cluster type', () => {
-1
View File
@@ -1,4 +1,3 @@
import {describe, expect, test} from 'vitest'
import {parseK8sSecret, K8sSecret} from './k8sSecret'
describe('K8sSecret type', () => {
-1
View File
@@ -1,4 +1,3 @@
import {describe, expect, test} from 'vitest'
import {Method, parseMethod} from './method'
describe('Method type', () => {
+6 -12
View File
@@ -1,31 +1,25 @@
import {beforeEach, describe, expect, test, vi} from 'vitest'
import fs from 'fs'
import * as arc from './kubeconfigs/arc'
import * as def from './kubeconfigs/default'
import {Cluster} from './types/cluster'
import {getKubeconfig, setContext} from './utils'
import * as core from '@actions/core'
describe('Utils', () => {
beforeEach(() => {
vi.restoreAllMocks()
vi.spyOn(core, 'warning').mockImplementation(() => {})
vi.spyOn(core, 'debug').mockImplementation(() => {})
})
describe('get kubeconfig', () => {
test('it gets arc kubeconfig when type is arc', async () => {
const arcKubeconfig = 'arckubeconfig'
vi.spyOn(arc, 'getArcKubeconfig').mockResolvedValue(arcKubeconfig)
jest
.spyOn(arc, 'getArcKubeconfig')
.mockImplementation(async () => arcKubeconfig)
expect(await getKubeconfig(Cluster.ARC)).toBe(arcKubeconfig)
})
test('it defaults to default kubeconfig', async () => {
const defaultKubeconfig = 'arckubeconfig'
vi.spyOn(def, 'getDefaultKubeconfig').mockImplementation(
() => defaultKubeconfig
)
jest
.spyOn(def, 'getDefaultKubeconfig')
.mockImplementation(() => defaultKubeconfig)
expect(await getKubeconfig(undefined)).toBe(defaultKubeconfig)
expect(await getKubeconfig(Cluster.GENERIC)).toBe(defaultKubeconfig)
+1 -1
View File
@@ -3,5 +3,5 @@
* @param inputName Name of input
* @returns Error with explanation message
*/
export const getRequiredInputError = (inputName: string): Error =>
export const getRequiredInputError = (inputName) =>
Error(`Input required and not supplied: ${inputName}`)
+4 -11
View File
@@ -1,15 +1,8 @@
{
"compilerOptions": {
"baseUrl": ".",
"module": "ESNext", // or "NodeNext" depending on your setup
"moduleResolution": "node",
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"paths": {
"@actions/core": ["node_modules/@actions/core"],
"@kubernetes/client-node": ["node_modules/@kubernetes/client-node"]
}
"target": "ES6",
"module": "commonjs",
"esModuleInterop": true
},
"exclude": ["node_modules", "lib"]
"exclude": ["node_modules", "tests", "src/**/*.test.ts"]
}
-20
View File
@@ -1,20 +0,0 @@
import {defineConfig} from 'vitest/config'
export default defineConfig({
test: {
environment: 'node',
include: ['**/*.test.ts'],
restoreMocks: true,
clearMocks: true,
mockReset: true,
coverage: {
provider: 'v8',
thresholds: {
statements: 22,
branches: 0,
functions: 40,
lines: 22
}
}
}
})