In software development, continuous integration and continuous deployment (CI/CD) are crucial processes. To simplify this process, I developed Cargo Actions, a command-line tool based on the Rust language, which provides efficient workflow template management and creation functionality for GitHub Actions.
The main functions of Cargo Actions include:
- User authentication and login: Securely integrate with GitHub via the OAuth 2.0 protocol, allowing users to log in to Cargo Actions using their GitHub accounts.
- Workflow initialization: Support for initializing a workflow from a GitHub repository or template ID, providing a flexible way to integrate GitHub Actions workflows.
- Template upload and sharing: Users can upload their own created workflow templates to the Cargo Actions platform and share them with other users.
- Personalized template management: Allow users to manage their uploaded and favorite templates, facilitating the quick launch of familiar or commonly used workflow configurations.
Installation
Run the following command in the terminal:
cargo install cargo-actions
Usage
Initialization
Create a project using the GitHub repository URL, and you can omit the https://github.com/ prefix. By default, the workflow template in https://github.com/yexiyue/cargo-actions will be used.
Using the abbreviated form, the rule (User/Repo) is:
cargo actions init yexiyue/cargo-actions
Using the URL form:
cargo actions init https://github.com/yexiyue/cargo-actions.git
Using the SSH form:
cargo actions init git@github.com:yexiyue/cargo-actions.git
You can also use the workflow on the Cargo Actions platform.
Copy the favorite workflow template to the terminal. For example:
cargo actions init 1 -i
Upload Template
If you want to upload your own workflow to the Cargo Actions platform, please log in first.
cargo actions login
Then prepare a workflow template.
A standard workflow template should have the following files:
- cargo-action.json: Configuration file used to prompt the user for input
- Template name.yaml.hbs: Template file
- README.md (optional)
cargo-action.json
configuration field description
Field Name | Type | Description |
---|---|---|
name | string | Template name |
description | string | Short description of the template |
path | string | Template file path, default ${name}.yaml.hbs
|
prompts | Prompt[] | Defines the command-line interactive input items |
success_message | string | Success message after template creation |
Prompt configuration instructions
There are 4 types of prompts:
- type: "input"
Field Name | Type | Description |
---|---|---|
field | string | Field name (corresponding to the variable name in the template) |
prompt | string | Input prompt |
default | string | Default value |
- type: "confirm"
Field Name | Type | Description |
---|---|---|
field | string | Field name (corresponding to the variable name in the template) |
prompt | string | Input prompt |
default | bool | Default value |
- type: "select"
Field Name | Type | Description |
---|---|---|
field | string | Field name (corresponding to the variable name in the template) |
prompt | string | Input prompt |
default | number | Index value of the default option |
options | {value: any, label: string}[] | Option list, where label is the prompt value and value is the value used in the template at the end |
- type: "multiselect"
Field Name | Type | Description |
---|---|---|
field | string | Field name (corresponding to the variable name in the template) |
prompt | string | Input prompt |
default | number[] | Array of index values of default options |
options | {value: any, label: string}[] | Option list, where label is the prompt value and value is the value used in the template at the end |
Example:
{
"name": "web-deploy",
"description": "Build a web application to Github Pages",
"prompts": [
{
"type": "select",
"field": "toolchain",
"prompt": "Please select a package management tool",
"default": 0,
"options": [
{
"label": "npm",
"value": "npm"
},
{
"label": "yarn",
"value": "yarn"
},
{
"label": "pnpm",
"value": "pnpm"
}
]
},
{
"type": "confirm",
"field": "enable_cache",
"prompt": "Enable caching",
"default": true
},
{
"type": "input",
"field": "node_version",
"prompt": "Please enter the node version number",
"default": "node"
},
{
"type": "input",
"field": "folder",
"prompt": "Web project path",
"default": "."
},
{
"type": "input",
"prompt": "Build artifact directory (relative to the web project path)",
"field": "target_dir",
"default": "dist"
},
{
"type": "confirm",
"prompt": "Copy index.html to 404.html to support spa",
"field": "copy_index",
"default": false
}
]
}
The template file is rendered using handlebars, and the template syntax can be referred to Handlebars (handlebarsjs.com).
Template file example:
name: web on: push: branches: - "master" workflow_dispatch: jobs: deploy:
runs-on: ubuntu-latest permissions: contents: write concurrency: group:
{{#raw}}$\{{ github.workflow }}-$\{{ github.ref }}{{/raw}}
steps: - name: Checkout repository uses: actions/checkout@v4
{{#if (eq toolchain "pnpm")}}
- name: Install pnpm run: npm install -g pnpm
{{/if}}
- name: Sync node version and setup cache uses: actions/setup-node@v4 with:
node-version: "{{node_version}}"
{{#if enable_cache}}
{{#if (eq toolchain "pnpm")}}
cache: "{{folder}}/pnpm-lock.yaml"
{{/if}}
{{#if (eq toolchain "npm")}}
cache: "{{folder}}/package-lock.json"
{{/if}}
{{#if (eq toolchain "yarn")}}
cache: "{{folder}}/yarn.lock"
{{/if}}
{{/if}}
- name: Install dependencies run: | cd
{{folder}}
{{toolchain}}
install - name: Build run: | cd
{{folder}}
{{toolchain}}
build
{{#if copy_index}}
cp
{{target_dir}}/index.html
{{target_dir}}/404.html
{{/if}}
- name: Deploy uses: peaceiris/actions-gh-pages@v4 with:
{{#raw}}github_token: $\{{ secrets.GITHUB_TOKEN }}{{/raw}}
publish_dir:
{{folder}}/{{target_dir}}
Note:
Expressions in {{{{raw}}}} {{{{/raw}}}}
will not be escaped.
Before uploading, you can use the check
command to verify if the workflow template is working properly.
cargo actions check
Then use the upload
command to upload the workflow template.
cargo actions upload
Using the created template
You can quickly use your own created workflow template with the following command, note that you need to log in.
cargo actions mine
You can also view the workflow template you created in the Cargo Actions platform Personal Center.
Using the favorite template
cargo actions favorite
This command is similar to the mine
command, and allows you to select a workflow from the templates you favorited on the Cargo Actions platform for initialization.
View more usage with the following command
cargo actions --help
Conclusion
If you are interested in Cargo Actions, welcome to visit my GitHub repository for more information.
At the same time, if you find this tool helpful, don't forget to give it a like! Your support is the driving force for me to continuously update and improve.
Top comments (0)