Compare commits

..

1 Commits

Author SHA1 Message Date
GitHub Action 212a19233d build 2024-09-06 21:27:57 +00:00
23 changed files with 191922 additions and 206905 deletions
+1 -1
View File
@@ -1 +1 @@
* @Azure/cloud-native-github-action-owners * @Azure/aks-atlanta
-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@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@0499de31b99561a6d14a36a5f662c2a54f91beee # 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@0499de31b99561a6d14a36a5f662c2a54f91beee # 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 represent a sequence of tasks that will be executed as part of the job
steps: steps:
- uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10.1.0 - uses: actions/stale@v3
name: Setting Issue as Idle name: Setting Issue as Idle
with: with:
repo-token: ${{ secrets.GITHUB_TOKEN }} repo-token: ${{ secrets.GITHUB_TOKEN }}
@@ -24,7 +24,7 @@ jobs:
operations-per-run: 100 operations-per-run: 100
exempt-issue-labels: 'backlog' exempt-issue-labels: 'backlog'
- uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10.1.0 - uses: actions/stale@v3
name: Setting PR as Idle name: Setting PR as Idle
with: with:
repo-token: ${{ secrets.GITHUB_TOKEN }} repo-token: ${{ secrets.GITHUB_TOKEN }}
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
steps: steps:
- name: Checkout Source Code - name: Checkout Source Code
id: checkout-code id: checkout-code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 uses: actions/checkout@v2
- name: Npm Install and Build - name: Npm Install and Build
id: npm-build id: npm-build
run: | run: |
+5 -12
View File
@@ -1,4 +1,4 @@
name: 'Run Prettify' name: 'Run prettify'
on: on:
pull_request: pull_request:
push: push:
@@ -10,16 +10,9 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout Repository - name: Checkout Repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 uses: actions/checkout@v2
- name: Setup Node.js - name: Enforce Prettier
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 uses: actionsx/prettier@v2
with: with:
node-version: 'lts/*' args: --check .
cache: 'npm'
- name: Install Dependencies
run: npm ci
- name: Run Prettier Check
run: npx prettier --check .
+1 -1
View File
@@ -13,7 +13,7 @@ jobs:
unit-test: unit-test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v1
- name: Run Unit Tests - name: Run Unit Tests
run: | run: |
npm install npm install
-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
}
-5
View File
@@ -1,10 +1,5 @@
# Change Log # 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 ## [4.0.1] - 2024-09-06
- #90 update dev dependencies with Typescript to 5 - #90 update dev dependencies with Typescript to 5
-4
View File
@@ -13,10 +13,6 @@ inputs:
kubeconfig: kubeconfig:
description: 'Contents of kubeconfig file' description: 'Contents of kubeconfig file'
required: false required: false
kubeconfig-encoding:
description: 'Encoding of the kubeconfig input. Accepts "plaintext" (default) or "base64".'
required: false
default: 'plaintext'
context: context:
description: 'If your kubeconfig has multiple contexts, use this field to use a specific context, otherwise the default one would be chosen' description: 'If your kubeconfig has multiple contexts, use this field to use a specific context, otherwise the default one would be chosen'
required: false required: false
-7
View File
@@ -1,7 +0,0 @@
// babel.config.js
export default {
presets: [
'@babel/preset-env', // For handling ES modules
'@babel/preset-typescript' // For handling TypeScript
]
}
+2 -10
View File
@@ -1,4 +1,4 @@
export default { module.exports = {
restoreMocks: true, restoreMocks: true,
clearMocks: true, clearMocks: true,
resetMocks: true, resetMocks: true,
@@ -6,16 +6,8 @@ export default {
testEnvironment: 'node', testEnvironment: 'node',
testMatch: ['**/*.test.ts'], testMatch: ['**/*.test.ts'],
transform: { transform: {
'^.+\\.ts$': 'ts-jest', // Use ts-jest for TypeScript files '^.+\\.ts$': 'ts-jest'
'^.+\\.js$': 'babel-jest' // Transform TypeScript files
}, },
transformIgnorePatterns: [
'/node_modules/(?!@kubernetes/client-node)/' // Make sure to transform the Kubernetes client module
],
moduleNameMapper: {
'^.+\\.css$': 'jest-transform-stub' // Handle CSS imports (if any)
},
extensionsToTreatAsEsm: ['.ts', '.tsx'], // Treat TypeScript files as ESM
verbose: true, verbose: true,
coverageThreshold: { coverageThreshold: {
global: { global: {
+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);
}
+184210 -196508
View File
File diff suppressed because one or more lines are too long
-3
View File
@@ -1,3 +0,0 @@
{
"type": "module"
}
+3876 -6393
View File
File diff suppressed because it is too large Load Diff
+14 -20
View File
@@ -1,17 +1,15 @@
{ {
"name": "k8s-set-context-action", "name": "k8s-set-context-action",
"version": "4.0.2", "version": "4.0.0",
"private": true, "private": true,
"main": "lib/index.js", "main": "lib/index.js",
"type": "module",
"scripts": { "scripts": {
"prebuild": "npm i @vercel/ncc", "prebuild": "npm i @vercel/ncc",
"build": "ncc build src/run.ts -o lib", "build": "ncc build src/run.ts -o lib",
"test": "jest", "test": "jest",
"test-coverage": "jest --coverage", "test-coverage": "jest --coverage",
"format": "prettier --write .", "format": "prettier --write .",
"format-check": "prettier --check .", "format-check": "prettier --check ."
"prepare": "husky"
}, },
"keywords": [ "keywords": [
"actions", "actions",
@@ -21,24 +19,20 @@
"author": "GitHub", "author": "GitHub",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@actions/core": "^1.11.1", "@actions/core": "^1.10.0",
"@actions/exec": "^1.1.1", "@actions/exec": "^1.0.0",
"@actions/io": "^2.0.0", "@actions/io": "^1.1.2",
"@kubernetes/client-node": "^1.4.0", "@kubernetes/client-node": "^0.16.0",
"husky": "^9.1.7",
"js-yaml": "^4.1.0" "js-yaml": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/preset-env": "^7.28.5", "@types/jest": "^29.5.11",
"@babel/preset-typescript": "^7.28.5", "@types/js-yaml": "^4.0.4",
"@types/jest": "^30.0.0", "@types/node": "^20.11.8",
"@types/js-yaml": "^4.0.9", "@vercel/ncc": "^0.38.1",
"@types/node": "^24.9.2", "jest": "^29.7.0",
"@vercel/ncc": "^0.38.4", "prettier": "^3.2.5",
"babel-jest": "^30.2.0", "ts-jest": "^29.2.5",
"jest": "^30.2.0", "typescript": "^5.3.3"
"prettier": "^3.6.2",
"ts-jest": "^29.4.5",
"typescript": "^5.9.3"
} }
} }
+1 -1
View File
@@ -9,6 +9,6 @@ describe('Az commands', () => {
jest.spyOn(actions, 'exec').mockImplementation(async () => 0) jest.spyOn(actions, 'exec').mockImplementation(async () => 0)
expect(await runAzCliCommand(path, args)) expect(await runAzCliCommand(path, args))
expect(actions.exec).toHaveBeenCalledWith(path, args, {}) expect(actions.exec).toBeCalledWith(path, args, {})
}) })
}) })
-42
View File
@@ -1,5 +1,4 @@
import * as fs from 'fs' import * as fs from 'fs'
import * as core from '@actions/core'
import {getRequiredInputError} from '../../tests/util' import {getRequiredInputError} from '../../tests/util'
import {createKubeconfig, getDefaultKubeconfig} from './default' import {createKubeconfig, getDefaultKubeconfig} from './default'
@@ -63,47 +62,6 @@ describe('Default kubeconfig', () => {
expect(getDefaultKubeconfig()).toBe(kc) expect(getDefaultKubeconfig()).toBe(kc)
}) })
test('returns kubeconfig as plaintext when encoding is plaintext', () => {
const kc = 'example kc'
jest.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')
jest.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'
jest.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', () => { test('it defaults to default method', () => {
+1 -21
View File
@@ -44,27 +44,7 @@ export function getDefaultKubeconfig(): string {
} }
default: { default: {
core.debug('Setting context using kubeconfig') core.debug('Setting context using kubeconfig')
enum Encoding { return core.getInput('kubeconfig', {required: true})
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
} }
} }
} }
+3 -10
View File
@@ -1,15 +1,8 @@
{ {
"compilerOptions": { "compilerOptions": {
"baseUrl": ".", "target": "ES6",
"module": "ESNext", // or "NodeNext" depending on your setup "module": "commonjs",
"moduleResolution": "node", "esModuleInterop": true
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"paths": {
"@actions/core": ["node_modules/@actions/core"],
"@kubernetes/client-node": ["node_modules/@kubernetes/client-node"]
}
}, },
"exclude": ["node_modules", "tests", "src/**/*.test.ts"] "exclude": ["node_modules", "tests", "src/**/*.test.ts"]
} }