Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add instructions for developing with a local version of the action #250

Merged
merged 5 commits into from
Nov 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/maintainers_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ All you need to work with this project is a supported version of [Node.js](https

## Tasks

### Developing

Iterate quickly by developing and testing a local version of this action using `npm run local`.
Information on setting up and configuring mocked events can be found in [`.github/workflows/local/README.md`](./workflows/local/README.md).

### Testing

When testing locally, ensure at least linting and unit tests pass by running `npm test`.
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/local/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Rename this file to .env and update any variables to get started

SLACK_BOT_TOKEN=xoxb-01010101-abcdefgh
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/T0123456789/B0123456789/abcdefghijklmnopqrstuvwxyz
2 changes: 2 additions & 0 deletions .github/workflows/local/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Secret variables
.env
25 changes: 25 additions & 0 deletions .github/workflows/local/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Local runs

For a simple development experience, a local version of this action can be used in experiments.

**Requirements**:

- An installation of [nektos/act](https://github.com/nektos/act)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't know this tool 👍


## Configuring secrets

To use `${{ secrets.* }}` in the workflow, move `.env.example` to `.env` and update any variables.

## Mocking event payloads

Different event payloads can be mocked directly with changes to the `event.json` file.

Reference: https://docs.github.com/en/webhooks/webhook-events-and-payloads

## Updating the workflow

The `local.yml` file contains the workflow used for testing. Updates to these steps can be made to test various functionalities.

## Running an experiment

Run the workflow using `npm run local`. The above configurations will be used to simulate an actual workflow run.
9 changes: 9 additions & 0 deletions .github/workflows/local/event.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"pull_request": {
"user": {
"login": "dependabot"
},
"title": "Bump actions/checkout from 3 to 4",
"html_url": "https://github.com/slackapi/slack-github-action/pull/238"
}
}
28 changes: 28 additions & 0 deletions .github/workflows/local/local.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Local run

# Requires mocking the "public" event to begin this workflow and avoid actual runs
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows
on:
public:

jobs:
run:
runs-on: ubuntu-latest
steps:
- name: Checkout action
uses: actions/checkout@v4
- name: Build action
run: npm install && npm run build
- name: Send a message into channel
id: slack
uses: ./.
with:
payload: |
{
"repository": "${{ github.repository }}",
"pull_request_username": "${{ github.event.pull_request.user.login }}",
"pull_request_title": ${{ toJSON(github.event.pull_request.title) }},
"pull_request_url": "${{ github.event.pull_request.html_url }}"
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"main": "dist/index.js",
"scripts": {
"lint": "eslint .",
"local": "act public --eventpath .github/workflows/local/event.json --secret-file .github/workflows/local/.env",
"test:mocha": "nyc mocha --config .mocharc.json test/*-test.js",
"test": "npm run lint && npm run test:mocha",
"build": "npx @vercel/ncc build src/index.js --license licenses.txt"
Expand Down