Skip to content

Commit

Permalink
initial actions
Browse files Browse the repository at this point in the history
  • Loading branch information
tonyhallett committed Apr 5, 2021
0 parents commit 9d90740
Show file tree
Hide file tree
Showing 48 changed files with 8,754 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
dist/
lib/
node_modules/
jest.config.js
59 changes: 59 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
{
"plugins": ["jest", "@typescript-eslint","eslint-plugin-prettier"],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 9,
"sourceType": "module",
"project": "./tsconfig.json"
},
"rules": {
"prettier/prettier": [
"error",
{
"endOfLine": "auto"
}
],
"eslint-comments/no-use": "off",
"import/no-namespace": "off",
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": "error",
"@typescript-eslint/explicit-member-accessibility": ["error", {"accessibility": "no-public"}],
"@typescript-eslint/no-require-imports": "error",
"@typescript-eslint/array-type": "error",
"@typescript-eslint/await-thenable": "error",
"@typescript-eslint/ban-ts-comment": "error",
"camelcase": "off",
"@typescript-eslint/consistent-type-assertions": "error",
"@typescript-eslint/explicit-function-return-type": ["error", {"allowExpressions": true}],
"@typescript-eslint/func-call-spacing": ["error", "never"],
"@typescript-eslint/no-array-constructor": "error",
"@typescript-eslint/no-empty-interface": "error",
"@typescript-eslint/no-explicit-any": "error",
"@typescript-eslint/no-extraneous-class": "error",
"@typescript-eslint/no-for-in-array": "error",
"@typescript-eslint/no-inferrable-types": "error",
"@typescript-eslint/no-misused-new": "error",
"@typescript-eslint/no-namespace": "error",
"@typescript-eslint/no-non-null-assertion": "warn",
"@typescript-eslint/no-unnecessary-qualifier": "error",
"@typescript-eslint/no-unnecessary-type-assertion": "error",
"@typescript-eslint/no-useless-constructor": "error",
"@typescript-eslint/no-var-requires": "error",
"@typescript-eslint/prefer-for-of": "warn",
"@typescript-eslint/prefer-function-type": "warn",
"@typescript-eslint/prefer-includes": "error",
"@typescript-eslint/prefer-string-starts-ends-with": "error",
"@typescript-eslint/promise-function-async": "error",
"@typescript-eslint/require-array-sort-compare": "error",
"@typescript-eslint/restrict-plus-operands": "error",
"semi": "off",
"@typescript-eslint/semi": ["error", "never"],
"@typescript-eslint/type-annotation-spacing": "error",
"@typescript-eslint/unbound-method": "error"
},
"env": {
"node": true,
"es6": true,
"jest/globals": true
}
}
99 changes: 99 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# Dependency directory
node_modules

# Rest pulled from https://github.com/github/gitignore/blob/master/Node.gitignore
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
jspm_packages/

# TypeScript v1 declaration files
typings/

# TypeScript cache
*.tsbuildinfo

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env
.env.test

# parcel-bundler cache (https://parceljs.org/)
.cache

# next.js build output
.next

# nuxt.js build output
.nuxt

# vuepress build output
.vuepress/dist

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# OS metadata
.DS_Store
Thumbs.db

# Ignore built ts files
__tests__/runner/*
lib/**/*
3 changes: 3 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
dist/
lib/
node_modules/
10 changes: 10 additions & 0 deletions .prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"printWidth": 80,
"tabWidth": 2,
"useTabs": false,
"semi": false,
"singleQuote": true,
"trailingComma": "none",
"bracketSpacing": false,
"arrowParens": "avoid"
}
21 changes: 21 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Jest All",
"program": "${workspaceFolder}/node_modules/.bin/jest",
"args": ["--runInBand"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"disableOptimisticBPs": true,
"windows": {
"program": "${workspaceFolder}/node_modules/jest/bin/jest",
}
},
]
}
9 changes: 9 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"exportall.config.folderListener": [
"/src/workflow/artifacts",
"/src/workflow",
"/src/helpers",
"/src/getPullRequestIssues",
"/src"
]
}
102 changes: 102 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
This contains github actions code to be used in github actions as well as notes on github actions.
The actions have their own repositories solely due to the requirement for one action per repository for the
marketplace.
For typescript actions there is a [repo template](https://github.com/actions/typescript-action), note that this
is for single action repositories.
This template can be amended if you want a multi action repository.
A multi action repository has a folder for each action containing a single action.yaml file with runs: main: the built script file.

Below is a script file that facilitates building with ncc in a repository with a naming convention.
Every action folder should have a corresponding typescript file in src.

```
/* eslint-disable no-console */
import * as path from 'path'
import * as fs from 'fs'
import {exec} from 'child_process'
function getRootDirectory(): string {
const scriptsDirectory = __dirname
return getParentDirectory(scriptsDirectory)
}
function getSourceDirectory(): string {
return path.join(getRootDirectory(), 'src')
}
function getSourceFiles(): string[] {
const sourceDirectory = getSourceDirectory()
return readDirSyncOfType(sourceDirectory, true)
}
function readDirSyncFullPath(directory: string): string[] {
return fs.readdirSync(directory).map(fe => path.join(directory, fe))
}
function readDirSyncOfType(directory: string, files: boolean): string[] {
const fileEntries = readDirSyncFullPath(directory)
return fileEntries.filter(fe => {
const isDirectory = fs.statSync(fe).isDirectory()
return files ? !isDirectory : isDirectory
})
}
function dirName(dir: string): string {
return dir.split(path.sep).pop() as string
}
function getParentDirectory(dir: string): string {
const parts = dir.split(path.sep)
parts.pop()
return parts.join(path.sep)
}
function nccBuildMultipleActionsByNamingConvention(): void {
const sourceFiles = getSourceFiles()
const possibleActionDirectories = readDirSyncOfType(
getRootDirectory(),
false
).map(d => dirName(d))
for (const sourceFile of sourceFiles) {
const matchingActionDirectoryName = path.basename(sourceFile, '.ts')
if (
possibleActionDirectories.some(d => d === matchingActionDirectoryName)
) {
nccBuild(sourceFile)
}
}
}
function nccBuild(tsFile: string): void {
console.log(`ncc building ${tsFile}`)
const distFolder = path.basename(tsFile, '.ts')
exec(
`npm run nccSingle -- build ${tsFile} --source-map --license licenses.txt --out dist/${distFolder}`,
{cwd: getSourceDirectory()},
(err, stdout, stderr) => {
if (err) {
console.log(stderr)
} else {
console.log(stdout)
}
}
)
}
nccBuildMultipleActionsByNamingConvention()
```
Amend the scripts key in package.json
```
"scripts": {
"build": "tsc",
"format": "prettier --write **/*.ts",
"format-check": "prettier --check **/*.ts",
"lint": "eslint src/**/*.ts",
"test": "jest",
"all": "npm run format && npm run lint && npm run package && npm test && npm run nccBuild",
"nccBuild": "ts-node scripts/nccBuild.ts",
"nccSingle": "ncc"
},
```

10 changes: 10 additions & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
module.exports = {
clearMocks: true,
moduleFileExtensions: ['js', 'ts'],
testEnvironment: 'node',
testMatch: ['**/*.test.ts'],
transform: {
'^.+\\.ts$': 'ts-jest'
},
verbose: true
}
Loading

0 comments on commit 9d90740

Please sign in to comment.