UNPKG

@ziuchen/tencent-scf-utils

Version:
124 lines (86 loc) 3.78 kB
# @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.