- Notifications
You must be signed in to change notification settings - Fork468
Create a JavaScript Action with tests, linting, workflow, publishing, and versioning
License
actions/javascript-action
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Use this template to bootstrap the creation of a JavaScript action. 🚀
This template includes compilation support, tests, a validation workflow,publishing, and versioning guidance.
If you are new, there's also a simpler introduction in theHello world JavaScript action repository.
To create your own action, you can use this repository as a template! Justfollow the below instructions:
- Click theUse this template button at the top of the repository
- SelectCreate a new repository
- Select an owner and name for your new repository
- ClickCreate repository
- Clone your new repository
Important
Make sure to remove or update theCODEOWNERS file! Fordetails on how to use this file, seeAbout code owners.
After you've cloned the repository to your local machine or codespace, you'llneed to perform some initial setup steps before you can develop your action.
Note
You'll need to have a reasonably modern version ofNode.js handy (20.x or later should work!). If you areusing a version manager likenodenv orfnm, this template has a.node-versionfile at the root of the repository that can be used to automatically switch tothe correct version when youcd into the repository. Additionally, this.node-version file is used by GitHub Actions in anyactions/setup-nodeactions.
🛠️ Install the dependencies
npm install
🏗️ Package the JavaScript for distribution
npm run bundle
✅ Run the tests
$ npmtestPASS ./index.test.js ✓ throws invalid number (3ms) ✓wait 500 ms (504ms) ✓test runs (95ms)...
Theaction.yml file defines metadata about your action, such asinput(s) and output(s). For details about this file, seeMetadata syntax for GitHub Actions.
When you copy this repository, updateaction.yml with the name, description,inputs, and outputs for your action.
Thesrc/ directory is the heart of your action! This contains thesource code that will be run when your action is invoked. You can replace thecontents of this directory with your own code.
There are a few things to keep in mind when writing your action code:
Most GitHub Actions toolkit and CI/CD operations are processed asynchronously.In
main.js, you will see that the action is run in anasyncfunction.constcore=require('@actions/core')//...asyncfunctionrun(){try{//...}catch(error){core.setFailed(error.message)}}
For more information about the GitHub Actions toolkit, see thedocumentation.
So, what are you waiting for? Go ahead and start customizing your action!
Create a new branch
git checkout -b releases/v1
Replace the contents of
src/with your action codeAdd tests to
__tests__/for your source codeFormat, test, and build the action
npm run all
This step is important! It will run
rolluptobuild the final JavaScript action code with all dependencies included. Ifyou do not run this step, your action will not work correctly when it isused in a workflow.(Optional) Test your action locally
The
@github/local-actionutilitycan be used to test your action locally. It is a simple command-line toolthat "stubs" (or simulates) the GitHub Actions Toolkit. This way, you can runyour JavaScript action locally without having to commit and push your changesto a repository.The
local-actionutility can be run in the following ways:Visual Studio Code Debugger
Make sure to review and, if needed, update
.vscode/launch.jsonTerminal/Command Prompt
# npx @github/local action <action-yaml-path> <entrypoint> <dotenv-file>npx @github/local-action. src/main.js .env
You can provide a
.envfile to thelocal-actionCLI to set environmentvariables used by the GitHub Actions Toolkit. For example, setting inputs andevent payload data used by your action. For more information, see the examplefile,.env.example, and theGitHub Actions Documentation.Commit your changes
git add.git commit -m"My first action is ready!"
Push them to your repository
git push -u origin releases/v1
Create a pull request and get feedback on your action
Merge the pull request into the
mainbranch
Your action is now published! 🚀
For information about versioning your action, seeVersioningin the GitHub Actions toolkit.
You can now validate the action by referencing it in a workflow file. Forexample,ci.yml demonstrates how to reference anaction in the same repository.
steps: -name:Checkoutid:checkoutuses:actions/checkout@v4 -name:Test Local Actionid:test-actionuses:./with:milliseconds:1000 -name:Print Outputid:outputrun:echo "${{ steps.test-action.outputs.time }}"
For example workflow runs, check out theActions tab! 🚀
After testing, you can create version tag(s) that developers can use toreference different stable versions of your action. For more information, seeVersioningin the GitHub Actions toolkit.
To include the action in a workflow in another repository, you can use theuses syntax with the@ symbol to reference a specific branch, tag, or commithash.
steps: -name:Checkoutid:checkoutuses:actions/checkout@v4 -name:Test Local Actionid:test-actionuses:actions/javascript-action@v1# Commit with the `v1` tagwith:milliseconds:1000 -name:Print Outputid:outputrun:echo "${{ steps.test-action.outputs.time }}"
This template includes a GitHub Actions workflow,licensed.yml, that usesLicensed to check for dependencies withmissing or non-compliant licenses. This workflow is initially disabled. Toenable the workflow, follow the below steps.
Open
licensed.ymlUncomment the following lines:
# pull_request:# branches:# - main# push:# branches:# - main
Save and commit the changes
Once complete, this workflow will run any time a pull request is created orchanges pushed directly tomain. If the workflow detects any dependencies withmissing or non-compliant licenses, it will fail the workflow and provide detailson the issue(s) found.
Whenever you install or update dependencies, you can use the Licensed CLI toupdate the licenses database. To install Licensed, see the project'sReadme.
To update the cached licenses, run the following command:
licensed cache
To check the status of cached licenses, run the following command:
licensed status
About
Create a JavaScript Action with tests, linting, workflow, publishing, and versioning
Resources
License
Code of conduct
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.