- Notifications
You must be signed in to change notification settings - Fork554
Create a TypeScript Action with tests, linting, workflow, publishing, and versioning
License
actions/typescript-action
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Use this template to bootstrap the creation of a TypeScript 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-version
file 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-node
actions.
🛠️ Install the dependencies
npm install
🏗️ Package the TypeScript 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.ts
, you will see that the action is run in anasync
function.import*ascorefrom'@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
rollup
tobuild 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-action
utilitycan 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 TypeScript action locally without having to commit and push your changesto a repository.The
local-action
utility can be run in the following ways:Visual Studio Code Debugger
Make sure to review and, if needed, update
.vscode/launch.json
Terminal/Command Prompt
# npx @github/local action <action-yaml-path> <entrypoint> <dotenv-file>npx @github/local-action. src/main.ts .env
You can provide a
.env
file to thelocal-action
CLI 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
main
branch
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/typescript-action@v1# Commit with the `v1` tagwith:milliseconds:1000 -name:Print Outputid:outputrun:echo "${{ steps.test-action.outputs.time }}"
This project includes a helper script,script/release
designed to streamline the process of tagging and pushing new releases forGitHub Actions.
GitHub Actions allows users to select a specific version of the action to use,based on release tags. This script simplifies this process by performing thefollowing steps:
- Retrieving the latest release tag: The script starts by fetching the mostrecent SemVer release tag of the current branch, by looking at the local dataavailable in your repository.
- Prompting for a new release tag: The user is then prompted to enter a newrelease tag. To assist with this, the script displays the tag retrieved inthe previous step, and validates the format of the inputted tag (vX.X.X). Theuser is also reminded to update the version field in package.json.
- Tagging the new release: The script then tags a new release and syncs theseparate major tag (e.g. v1, v2) with the new release tag (e.g. v1.0.0,v2.1.2). When the user is creating a new major release, the scriptauto-detects this and creates a
releases/v#
branch for the previous majorversion. - Pushing changes to remote: Finally, the script pushes the necessarycommits, tags and branches to the remote repository. From here, you will needto create a new release in GitHub so users can easily reference the new tagsin their workflows.
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.yml
Uncomment 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 TypeScript Action with tests, linting, workflow, publishing, and versioning
Topics
Resources
License
Code of conduct
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.