@ziuchen/tencent-scf-utils
Version:
A simple tool for deploying Tencent SCF
124 lines (86 loc) • 3.78 kB
Markdown
# @ziuchen/tencent-scf-utils
A simple tool for deploying Tencent SCF
## Install
```sh
npm i @ziuchen/tencent-scf-utils -D
```
## Usage
```sh
tscf -h
```
### Deploy Command
Deploy a directory to Tencent SCF:
```sh
tscf deploy ./dist -n my-function --region ap-shanghai --namespace default
```
`deploy` publishes a function version but never updates an alias.
### Release Command
Upload a prebuilt Layer ZIP to COS, publish its new version, bind it to `$LATEST`, deploy function code, and publish a function version:
```sh
tscf release ./dist \
--layer-zip artifacts/dependencies.zip \
--layer-name my-dependencies \
--replace-layer-name old-dependencies \
--layer-bucket my-layer-bucket-1234567890 \
--layer-region ap-shanghai \
--layer-prefix layers/my-function \
--layer-runtime Nodejs24.11 \
--layer-use-accelerate
```
The Layer object key is derived from the ZIP SHA-256 digest. The command preserves other Layer bindings and replaces `--replace-layer-name` in place; without that option, it replaces the matching new Layer name. `--layer-runtime` is always sent to SCF as the new Layer's compatible runtime. It does not update an alias.
For archives larger than 5 MiB, `release` uses COS high-level multipart upload with progress logging, retries, and per-request timeouts. The deployment identity needs `PutObject`, `InitiateMultipartUpload`, `ListMultipartUploads`, `ListParts`, `UploadPart`, `CompleteMultipartUpload`, and `AbortMultipartUpload` on the selected Layer object prefix.
### Layer Command
Build and upload a layer.zip with production dependencies:
```sh
tscf layer -p package.json
```
You can pass additional npm install arguments using the `--npm-args` option:
```sh
# Pass --ignore-scripts to npm install
tscf layer --npm-args "--ignore-scripts"
# Pass multiple npm arguments
tscf layer --npm-args "--ignore-scripts --no-audit --no-fund"
# Combine with layer-specific options
tscf layer -p custom-package.json --npm-args "--ignore-scripts --verbose"
```
The `--npm-args` option accepts a space-separated string of arguments that will be passed directly to the `npm install` command.
## Best Practice
tscf will load config from enviroment variables below:
```bash
TENCENTCLOUD_SCF_FUNCTION_NAME=xxxxxxxxxxxxxxxxxxxx
TENCENTCLOUD_SCF_REGION=ap-shanghai
TENCENTCLOUD_SCF_NAMESPACE=default
TENCENTCLOUD_SCF_SECRET_ID=xxxxxxxxxxxxxxxxxxxx
TENCENTCLOUD_SCF_SECRET_KEY=xxxxxxxxxxxxxxxxxxxx
TENCENTCLOUD_SCF_LAYER_NAME=my-dependencies
TENCENTCLOUD_SCF_REPLACE_LAYER_NAME=old-dependencies
TENCENTCLOUD_SCF_LAYER_BUCKET=my-layer-bucket-1234567890
TENCENTCLOUD_SCF_LAYER_BUCKET_REGION=ap-shanghai
TENCENTCLOUD_SCF_LAYER_PREFIX=layers/my-function
TENCENTCLOUD_SCF_LAYER_RUNTIME=Nodejs24.11
TENCENTCLOUD_SCF_LAYER_USE_ACCELERATE=true
```
`TENCENTCLOUD_SCF_LAYER_BUCKET` is the full COS bucket name. SCF's API receives the bucket name without the AppId suffix automatically.
Set `TENCENTCLOUD_SCF_LAYER_USE_ACCELERATE=true` to upload through COS global acceleration; it passes `UseAccelerate` to the SDK and uses the bucket's `cos.accelerate.myqcloud.com` endpoint.
Using with `@dotenvx/dotenvx`:
```json
{
"scripts": {
"deploy:scf": "dotenvx run -- tscf deploy ./dist"
}
}
```
dotenvx will load enviroment variables from `.env` file for `tencent-scf-utils`.
## Development
This link `tencent-scf-utils` to global.
```sh
pnpm link -g
```
In other package, run this to link `tencent-scf-utils` locally.
```sh
pnpm link -g tencent-scf-utils
```
After modified code, you should rerun these command to make changes apply.
## Publish
Run the `Publish npm package` GitHub Actions workflow with `workflow_dispatch`.
It uses npm Trusted Publishing through GitHub OIDC and does not require an npm token in the repository.