Skip to content

Commit

Permalink
Merge pull request #2 from kamaz/feat/docs-tests
Browse files Browse the repository at this point in the history
docs: documentation and tests
  • Loading branch information
kamaz authored Feb 15, 2020
2 parents c158dd0 + f6aa368 commit 160dcba
Show file tree
Hide file tree
Showing 6 changed files with 204 additions and 131 deletions.
12 changes: 12 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,15 @@ jobs:
token: ${{secrets.GITHUB_TOKEN}}
environmentUrl: https://github.com/features/actions
state: success
incorrect-deployment-id: # make sure the action works on a clean machine without building
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: ./
id: deployment
with:
deploymentId: invalid.deployment
token: ${{secrets.GITHUB_TOKEN}}
environmentUrl: https://github.com/features/actions
environment: staging
state: failure
151 changes: 45 additions & 106 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,117 +1,56 @@
<p align="center">
<a href="https://github.com/actions/typescript-action/actions"><img alt="typescript-action status" src="https://github.com/actions/typescript-action/workflows/build-test/badge.svg"></a>
</p>
# deploy action

# Create a JavaScript Action using TypeScript
Action is a wrapper around deployment api.

Use this template to bootstrap the creation of a JavaScript action.:rocket:
For detail documentation and explanation refer to:

This template includes compilication support, tests, a validation workflow, publishing, and versioning guidance.
- [GitHub Deployments API](https://developer.github.com/v3/repos/deployments/)
- [GitHub Deployments API Create Deployment Section](https://developer.github.com/v3/repos/deployments/#create-a-deployment)
- [GitHub Deployments API Create Deployment Status Section](https://developer.github.com/v3/repos/deployments/#create-a-deployment-status)

If you are new, there's also a simpler introduction. See the [Hello World JavaScript Action](https://github.com/actions/hello-world-javascript-action)
## Inputs

## Create an action from this template
| Input | Optional | Default | Description |
| --------------------- | -------- | ------- | ---------------------- |
| token | No | - | github token |
| deploymentId | Yes | Empty | |
| state | Yes | pending | |
| environmentUrl | Yes | - | |
| requiredContext | Yes | Empty | Format 'value1,value2' |
| autoMerge | Yes | false | |
| environment | Yes | qa | |
| transientEnvironment | Yes | true | |
| productionEnvironment | Yes | false | |

Click the `Use this Template` and provide the new repo details for your action
## Outputs

## Code in Master
| Output | Value |
| ------------ | -------------------------------------------------------- |
| deploymentId | a deployment number that can be used to set status later |

Install the dependencies
```bash
$ npm install
```

Build the typescript
```bash
$ npm run build
```

Run the tests :heavy_check_mark:
```bash
$ npm test

PASS ./index.test.js
✓ throws invalid number (3ms)
wait 500 ms (504ms)
test runs (95ms)

...
```

## Change action.yml

The action.yml contains defines the inputs and output for your action.

Update the action.yml with your name, description, inputs and outputs for your action.

See the [documentation](https://help.github.com/en/articles/metadata-syntax-for-github-actions)

## Change the Code

Most toolkit and CI/CD operations involve async operations so the action is run in an async function.

```javascript
import * as core from '@actions/core';
...

async function run() {
try {
...
}
catch (error) {
core.setFailed(error.message);
}
}

run()
```

See the [toolkit documentation](https://github.com/actions/toolkit/blob/master/README.md#packages) for the various packages.

## Publish to a distribution branch

Actions are run from GitHub repos. We will create a releases branch and only checkin production modules (core in this case).

Comment out node_modules in .gitignore and create a releases/v1 branch
```bash
# comment out in distribution branches
# node_modules/
```

```bash
$ git checkout -b releases/v1
$ git commit -a -m "prod dependencies"
```

```bash
$ npm prune --production
$ git add node_modules
$ git commit -a -m "prod dependencies"
$ git push origin releases/v1
```

Your action is now published! :rocket:

See the [versioning documentation](https://github.com/actions/toolkit/blob/master/docs/action-versioning.md)

## Validate

You can now validate the action by referencing the releases/v1 branch

```yaml
uses: actions/typescript-action@releases/v1
with:
milliseconds: 1000
```
See the [actions tab](https://github.com/actions/javascript-action/actions) for runs of this action! :rocket:
## Usage:
After testing you can [create a v1 tag](https://github.com/actions/toolkit/blob/master/docs/action-versioning.md) to reference the stable and tested action
## Example usage

```yaml
uses: actions/typescript-action@v1
with:
milliseconds: 1000
- uses: kamaz/deploy-action@v1.0
id: deployment
with:
token: ${{ secrets.GITHUB_TOKEN }}
environmentUrl: ${{ format('https://pr-{0}.example.com', github.event.number) }}
#
# Your deployment steps
#
- uses: kamaz/deploy-action@v1.0
if: success()
with:
deploymentId: ${{ steps.deployment.outputs.deploymentId }}
token: ${{ secrets.GITHUB_TOKEN }}
environmentUrl: ${{ format('https://pr-{0}.example.com', github.event.number) }}
state: success
- uses: kamaz/deploy-action@v1.0
if: failure()
with:
deploymentId: ${{ steps.deployment.outputs.deploymentId }}
token: ${{ secrets.GITHUB_TOKEN }}
environmentUrl: ${{ format('https://pr-{0}.example.com', github.event.number) }}
state: failure
```
8 changes: 8 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ inputs:
description: Auto merge
required: false
default: 'false'
environment:
description: Transient environment
required: false
default: 'qa'
transientEnvironment:
description: Transient environment
required: false
Expand All @@ -30,6 +34,10 @@ inputs:
description: Production environment
required: false
default: 'false'
# onStateFailureStopBuild:
# description: Github token
# required: false
# default: 'true'
token:
description: Github token
required: true
Expand Down
22 changes: 10 additions & 12 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2043,25 +2043,21 @@ const deploymentContext = () => {
}
};
const createDeploymentPayload = () => {
const { login, owner, ref, repo } = deploymentContext();
const { owner, ref, repo } = deploymentContext();
const requiredContext = core
.getInput('requiredContext')
.split(',')
.filter(x => x !== '');
const autoMerge = core.getInput('autoMerge');
const transientEnvironment = core.getInput('transientEnvironment');
const productionEnvironment = core.getInput('productionEnvironment');
const environment = core.getInput('environment');
return {
owner,
repo,
ref,
required_contexts: requiredContext,
payload: JSON.stringify({
user: login,
environment: 'qa',
description: 'deploying my lovely branch'
}),
environment: 'qa',
environment,
transient_environment: isTrue(transientEnvironment),
auto_merge: isTrue(autoMerge),
production_environment: isTrue(productionEnvironment)
Expand All @@ -2076,7 +2072,7 @@ const createDeploymentStatusPayload = (deploymentId) => {
return {
owner,
repo,
deployment_id: parseInt(deploymentId, 10),
deployment_id: deploymentId,
state,
description: 'this is pr',
log_url: logUrl,
Expand All @@ -2087,16 +2083,18 @@ function run() {
return __awaiter(this, void 0, void 0, function* () {
try {
const githubToken = core.getInput('token');
let deploymentId = core.getInput('deploymentId');
let deploymentId = parseInt(core.getInput('deploymentId'), 10);
core.debug(`Deployment id ${deploymentId}`);
core.info(`Deployment id ${deploymentId}`);
const octokit = new github_1.GitHub(githubToken, {});
if (deploymentId === '') {
if (isNaN(deploymentId)) {
const deploy = yield octokit.repos.createDeployment(createDeploymentPayload());
deploymentId = `${deploy.data.id}`;
deploymentId = deploy.data.id;
core.info(`Created deployment id: ${deploymentId}`);
}
const deploymentStatus = yield octokit.repos.createDeploymentStatus(createDeploymentStatusPayload(deploymentId));
core.info(`Created deployment status: ${deploymentStatus.data.id}`);
core.setOutput('deploymentId', deploymentId);
core.setOutput('deploymentId', `${deploymentId}`);
}
catch (error) {
core.setFailed(error.message);
Expand Down
117 changes: 117 additions & 0 deletions docs/develop.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
<p align="center">
<a href="https://github.com/actions/typescript-action/actions"><img alt="typescript-action status" src="https://github.com/actions/typescript-action/workflows/build-test/badge.svg"></a>
</p>

# Create a JavaScript Action using TypeScript

Use this template to bootstrap the creation of a JavaScript action.:rocket:

This template includes compilication support, tests, a validation workflow, publishing, and versioning guidance.

If you are new, there's also a simpler introduction. See the [Hello World JavaScript Action](https://github.com/actions/hello-world-javascript-action)

## Create an action from this template

Click the `Use this Template` and provide the new repo details for your action

## Code in Master

Install the dependencies
```bash
$ npm install
```

Build the typescript
```bash
$ npm run build
```

Run the tests :heavy_check_mark:
```bash
$ npm test

PASS ./index.test.js
✓ throws invalid number (3ms)
wait 500 ms (504ms)
test runs (95ms)

...
```

## Change action.yml

The action.yml contains defines the inputs and output for your action.

Update the action.yml with your name, description, inputs and outputs for your action.

See the [documentation](https://help.github.com/en/articles/metadata-syntax-for-github-actions)

## Change the Code

Most toolkit and CI/CD operations involve async operations so the action is run in an async function.

```javascript
import * as core from '@actions/core';
...

async function run() {
try {
...
}
catch (error) {
core.setFailed(error.message);
}
}

run()
```

See the [toolkit documentation](https://github.com/actions/toolkit/blob/master/README.md#packages) for the various packages.

## Publish to a distribution branch

Actions are run from GitHub repos. We will create a releases branch and only checkin production modules (core in this case).

Comment out node_modules in .gitignore and create a releases/v1 branch
```bash
# comment out in distribution branches
# node_modules/
```

```bash
$ git checkout -b releases/v1
$ git commit -a -m "prod dependencies"
```

```bash
$ npm prune --production
$ git add node_modules
$ git commit -a -m "prod dependencies"
$ git push origin releases/v1
```

Your action is now published! :rocket:

See the [versioning documentation](https://github.com/actions/toolkit/blob/master/docs/action-versioning.md)

## Validate

You can now validate the action by referencing the releases/v1 branch

```yaml
uses: actions/typescript-action@releases/v1
with:
milliseconds: 1000
```
See the [actions tab](https://github.com/actions/javascript-action/actions) for runs of this action! :rocket:
## Usage:
After testing you can [create a v1 tag](https://github.com/actions/toolkit/blob/master/docs/action-versioning.md) to reference the stable and tested action
```yaml
uses: actions/typescript-action@v1
with:
milliseconds: 1000
```
Loading

0 comments on commit 160dcba

Please sign in to comment.