Create CI workflow and tests
This commit is contained in:
parent
3cfb7ea35a
commit
464b2658f0
|
@ -0,0 +1,60 @@
|
||||||
|
name: Continuous Integration
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- 'releases/*'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test-typescript:
|
||||||
|
name: TypeScript Tests
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
id: checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
id: setup-node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version-file: .node-version
|
||||||
|
cache: npm
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
id: npm-ci
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Check Format
|
||||||
|
id: npm-format-check
|
||||||
|
run: npm run format:check
|
||||||
|
|
||||||
|
- name: Lint
|
||||||
|
id: npm-lint
|
||||||
|
run: npm run lint
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
id: npm-ci-test
|
||||||
|
run: npm ci-test
|
||||||
|
|
||||||
|
test-action:
|
||||||
|
name: GitHub Actions Test
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
id: checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Test Local Action
|
||||||
|
id: test-action
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
milliseconds: 1000
|
||||||
|
|
||||||
|
- name: Print Output
|
||||||
|
id: output
|
||||||
|
run: echo "${{ steps.test-action.outputs.time }}"
|
|
@ -1,24 +0,0 @@
|
||||||
name: 'build-test'
|
|
||||||
on: # rebuild any PRs and main branch changes
|
|
||||||
pull_request:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
- 'releases/*'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build: # make sure build/ci work properly
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- run: |
|
|
||||||
npm install
|
|
||||||
- run: |
|
|
||||||
npm run all
|
|
||||||
test: # make sure the action works on a clean machine without building
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- uses: ./
|
|
||||||
with:
|
|
||||||
milliseconds: 1000
|
|
|
@ -0,0 +1 @@
|
||||||
|
18.16.0
|
|
@ -0,0 +1,28 @@
|
||||||
|
import { wait } from '../src/wait'
|
||||||
|
import * as process from 'process'
|
||||||
|
import * as cp from 'child_process'
|
||||||
|
import * as path from 'path'
|
||||||
|
import { expect, test } from '@jest/globals'
|
||||||
|
|
||||||
|
test('throws invalid number', async () => {
|
||||||
|
const input = parseInt('foo', 10)
|
||||||
|
await expect(wait(input)).rejects.toThrow('milliseconds not a number')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('wait 500 ms', async () => {
|
||||||
|
const start = new Date()
|
||||||
|
await wait(500)
|
||||||
|
const end = new Date()
|
||||||
|
var delta = Math.abs(end.getTime() - start.getTime())
|
||||||
|
expect(delta).toBeGreaterThan(450)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('test runs', () => {
|
||||||
|
process.env['INPUT_MILLISECONDS'] = '500'
|
||||||
|
const np = process.execPath
|
||||||
|
const ip = path.join(__dirname, '..', 'dist', 'index.js')
|
||||||
|
const options: cp.ExecFileSyncOptions = {
|
||||||
|
env: process.env
|
||||||
|
}
|
||||||
|
console.log(cp.execFileSync(np, [ip], options).toString())
|
||||||
|
})
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,28 @@
|
||||||
|
import * as core from '@actions/core'
|
||||||
|
import { wait } from './wait'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The main function for the action.
|
||||||
|
* @returns {Promise<void>} Resolves when the action is complete.
|
||||||
|
*/
|
||||||
|
async function run(): Promise<void> {
|
||||||
|
try {
|
||||||
|
const ms: string = core.getInput('milliseconds')
|
||||||
|
|
||||||
|
// Debug logs are only output if the `ACTIONS_STEP_DEBUG` secret is true
|
||||||
|
core.debug(`Waiting ${ms} milliseconds ...`)
|
||||||
|
|
||||||
|
// Log the current timestamp, wait, then log the new timestamp
|
||||||
|
core.debug(new Date().toTimeString())
|
||||||
|
await wait(parseInt(ms, 10))
|
||||||
|
core.debug(new Date().toTimeString())
|
||||||
|
|
||||||
|
// Set outputs for other workflow steps to use
|
||||||
|
core.setOutput('time', new Date().toTimeString())
|
||||||
|
} catch (error) {
|
||||||
|
// Fail the workflow run if an error occurs
|
||||||
|
if (error instanceof Error) core.setFailed(error.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
run()
|
|
@ -1,3 +1,8 @@
|
||||||
|
/**
|
||||||
|
* Wait for a number of milliseconds.
|
||||||
|
* @param milliseconds The number of milliseconds to wait.
|
||||||
|
* @returns {Promise<string>} Resolves with 'done!' after the wait is over.
|
||||||
|
*/
|
||||||
export async function wait(milliseconds: number): Promise<string> {
|
export async function wait(milliseconds: number): Promise<string> {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
if (isNaN(milliseconds)) {
|
if (isNaN(milliseconds)) {
|
||||||
|
|
Loading…
Reference in New Issue