diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..56a2a33 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,73 @@ +# This is a basic workflow to help you get started with Actions + +name: CI + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the "main" branch + push: + branches: [ "main", "dev" ] + pull_request: + branches: [ "main", "dev" ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +permissions: + contents: read + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + - uses: actions/setup-node@v4 + with: + node-version: 14.14.0 + + # Runs my action + - name: Setup serverless-devs for aliyun + id: setup-s-aliyun + uses: ./ + with: + provider: aliyun + account_id: MOCK_ACCOUNT_ID + access_key_id: MOCK_KEY_ID + access_key_secret: MOCK_KEY_SECRET + access: MOCK_ACCESS_ALIAS_ALIYUN + + - name: Setup serverless-devs for aws + id: setup-s-aws + uses: ./ + with: + provider: aws + access_key_id: MOCK_KEY_ID + secret_access_key: MOCK_Secret_Access_Key + access: MOCK_ACCESS_ALIAS_AWS + + - name: Setup serverless-devs for tencent + id: setup-s-tencent + uses: ./ + with: + provider: tencent + account_id: MOCK_ACCOUNT_ID + secret_id: MOCK_SECRET_ID + secret_key: MOCK_SECRET_KEY + access: MOCK_ACCESS_ALIAS_TENCENT + + - name: Setup serverless-devs for huawei + id: setup-s-huawei + uses: ./ + with: + provider: huawei + access_key_id: MOCK_KEY_ID + secret_access_key: MOCK_Secret_Access_Key + access: MOCK_ACCESS_ALIAS_HUAWEI + diff --git a/README.md b/README.md index 9421bf6..6c05354 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,96 @@ -# setup-s -使用 GitHub Actions 自动化配置 Serverless Devs 环境,该工作流将预装必要的工具并设定相关的云服务账户凭证。这个过程简化了在 GitHub Actions 平台上的 Serverless 应用部署,确保每次推送代码或发起合并请求时,Serverless 应用都能在预配置的环境中快速、一致地被构建和发布。 +# setup-s-aliyun +

+ 中文English
+

+ +基于阿里云函数计算的 Serverless-devs 安装。 + +## 使用示例 +可以按需在 setup-s 前添加前置 steps,例如 + +```yaml +steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v4 + with: + node-version: 14.14.0 +``` + +### aliyun +```yaml +steps: + - name: Setup Serverless-devs for aliyun + uses: actions/setup-s@v1 + with: + provider: aliyun + version: 3.0.2 + account_id: ${{ secrets.ACCOUNT_ID }} + access_key_id: ${{ secrets.ACCESS_KEYID }} + access_key_secret: ${{ secrets.ACCESS_KEYSECRET }} + access: aliyun_access +``` + +### aws +```yaml +steps: + - name: Setup Serverless-devs for aws + uses: actions/setup-s@v1 + with: + provider: aws + # version: 3.0.0 + access_key_id: ${{ secrets.ACCESS_KEYID }} + secret_access_key: ${{ secrets.SECRET_ACCESSKEY }} + access: aws_access +``` + +### huawei +```yaml +steps: + - name: Setup Serverless-devs for huawei + uses: actions/setup-s@v1 + with: + provider: huawei + # version: 3.0.2 + access_key_id: ${{ secrets.ACCESS_KEYID }} + secret_access_key: ${{ secrets.SECRET_ACCESSKEY }} + access: huawei_access +``` + +### tencent +```yaml +steps: + - name: Setup Serverless-devs for tencent + uses: actions/setup-s@v1 + with: + provider: tencent + account_id: ${{ secrets.ACCOUNT_ID }} + secret_id: ${{ secrets.SECRET_ID }} + secret_key: ${{ secrets.SECRET_KEY}} + access: tencent_access +``` + +## 参数说明 +| 字段 | 说明 | 类型 | 默认值 | +| ----- | -------- | ---- | ---| +| provider | 必填,云厂商名称 | string | - | +| account_id | 部分厂商账号ID | string | - | +| access_key_id | 部分厂商账号AK | string | - | +| access_key_secret | 部分厂商账号SK | string | - | +| secret_access_key | 部分厂商账号SK | string | - | +| secret_id | 部分厂商账号AK | string | - | +| secret_key | 部分厂商账号SK | string | - | +| access | 密钥别名 | string | default | +| version | 非必填,安装版本 | 3.0.0 | 3.0.0 | + + +密钥相关说明详见 [Serverless-devs 文档](https://docs.serverless-devs.com/serverless-devs/default_provider_config#%E9%98%BF%E9%87%8C%E4%BA%91%E5%AF%86%E9%92%A5%E8%8E%B7%E5%8F%96)。 + + +## 常见云厂商密钥配置内容 + +| 云厂商 | 类型 | +| --- | --- | +| aliyun | AccountID, AccessKeyID, AccessKeySecret | +| aws | AccessKeyID, SecretAccessKey| +| huawei | AccessKeyID, SecretAccessKey| +| tencent | AccountID, SecretID, SecretKey| \ No newline at end of file diff --git a/README_en.md b/README_en.md new file mode 100644 index 0000000..a90b819 --- /dev/null +++ b/README_en.md @@ -0,0 +1,99 @@ +# setup-s-aliyun +

+ 中文English
+

+ +Setting up serverless-devs based on Aliyun Function Compute. + +## Usage +You could add pre-steps before using setup-s, for example: + +```yaml +steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v4 + with: + node-version: 14.14.0 +``` + +### aliyun +```yaml +steps: + - name: Setup Serverless-devs for aliyun + uses: actions/setup-s@v1 + with: + provider: aliyun + version: 3.0.2 + account_id: ${{ secrets.ACCOUNT_ID }} + access_key_id: ${{ secrets.ACCESS_KEYID }} + access_key_secret: ${{ secrets.ACCESS_KEYSECRET }} + access: aliyun_access +``` + +### aws +```yaml +steps: + - name: Setup Serverless-devs for aws + uses: actions/setup-s@v1 + with: + provider: aws + # version: 3.0.0 + access_key_id: ${{ secrets.ACCESS_KEYID }} + secret_access_key: ${{ secrets.SECRET_ACCESSKEY }} + access: aws_access +``` + +### huawei +```yaml +steps: + - name: Setup Serverless-devs for huawei + uses: actions/setup-s@v1 + with: + provider: huawei + # version: 3.0.2 + access_key_id: ${{ secrets.ACCESS_KEYID }} + secret_access_key: ${{ secrets.SECRET_ACCESSKEY }} + access: huawei_access +``` + +### tencent +```yaml +steps: + - name: Setup Serverless-devs for tencent + uses: actions/setup-s@v1 + with: + provider: tencent + account_id: ${{ secrets.ACCOUNT_ID }} + secret_id: ${{ secrets.SECRET_ID }} + secret_key: ${{ secrets.SECRET_KEY}} + access: tencent_access +``` + +## Params +| Property | Description | Type | Default | +| ----- | -------- | ---- | ---| +| provider | required, service provider | string | - | +| account_id | account ID | string | - | +| access_key_id | optical account AK | string | - | +| access_key_secret | optical account SK | string | - | +| secret_access_key | optical account SK | string | - | +| secret_id | optical account AK | string | - | +| secret_key | optical account SK | string | - | +| access | access alias | string | default | +| version | serverless-devs version | 3.0.0 | 3.0.0 | + + +More details about Aliyun Access Configs, please refer to [Serverless-devs doc](https://docs.serverless-devs.com/serverless-devs/default_provider_config#%E9%98%BF%E9%87%8C%E4%BA%91%E5%AF%86%E9%92%A5%E8%8E%B7%E5%8F%96)。 + + +## Provider's Access Configs + +| Provider | Required | +| --- | --- | +| alibaba | AccountID, AccessKeyID, AccessKeySecret | +| aws | AccessKeyID, SecretAccessKey| +| baidu | AccessKeyID, SecretAccessKey| +| huawei | AccessKeyID, SecretAccessKey| +| azure | KeyVaultName, TenantID, ClientID, ClientSecret| +| tencent | AccountID, SecretID, SecretKey| +| google | PrivateKeyData | \ No newline at end of file diff --git a/action.yml b/action.yml new file mode 100644 index 0000000..593bc56 --- /dev/null +++ b/action.yml @@ -0,0 +1,55 @@ +name: 'Setup for Serverless-Devs' +description: 'An Action for Setup Serverless-Devs and Different Provider Authorization Config' +author: 'heimanba' +branding: + icon: 'heart' + color: 'red' + +inputs: + provider: + description: 'Provider Name (aliyun/aws/tencent/huawei)' + required: true + default: 'aliyun' + version: + description: 'Serverless-devs Version, 3.0.0 as default.' + required: false + default: '3.0.0' + access: + description: 'Access Alias Name' + required: true + default: 'default' + account_id: + description: 'Main Account ID' + required: false + access_key_id: + description: 'Access Key ID' + required: false + access_key_secret: + description: 'Access Key Secret' + required: false + secret_access_key: + description: 'Secret Access Key' + required: false + secret_id: + description: 'Secret ID' + required: false + secret_key: + description: 'Secret Key' + required: false + + +runs: + using: "composite" + steps: + - run: ./script.sh ${{inputs.provider}} ${{ inputs.version }} ${{ inputs.account_id }} ${{ inputs.access_key_id }} ${{ inputs.access_key_secret }} ${{ inputs.access }} + shell: bash + if: inputs.provider == 'aliyun' + - run: ./script.sh ${{inputs.provider}} ${{ inputs.version }} ${{ inputs.access_key_id }} ${{ inputs.secret_access_key }} ${{ inputs.access }} + shell: bash + if: inputs.provider == 'aws' + - run: ./script.sh ${{inputs.provider}} ${{ inputs.version }} ${{ inputs.account_id }} ${{ inputs.access_key_id }} ${{ inputs.secret_key }} ${{ inputs.access }} + shell: bash + if: inputs.provider == 'tencent' + - run: ./script.sh ${{inputs.provider}} ${{ inputs.version }} ${{ inputs.access_key_id }} ${{ inputs.secret_access_key }} ${{ inputs.access }} + shell: bash + if: inputs.provider == 'huawei' \ No newline at end of file diff --git a/script.sh b/script.sh new file mode 100755 index 0000000..5959e36 --- /dev/null +++ b/script.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# 执行命令并捕获输出 +VERSION_OUTPUT=$(s -v) +version=$2 +set -e # 报错后不继续执行 + +# 检查输出是否包含版本号的格式 +if [[ $VERSION_OUTPUT ]]; then + EXTRACTED_CONTENT=$(echo "$VERSION_OUTPUT" | sed -n 's/start:\([^,]*\),.*/\1/p;q') + echo "Version output is valid: $EXTRACTED_CONTENT" +else + echo 'Serverless-devs installing.' + curl "https://images.devsapp.cn/bin/s/v${version}" --output /usr/local/bin/s + chmod 777 /usr/local/bin/s + echo 'Serverless-devs has been installed successfully.' +fi + +echo '################################################' +if [[ $1 == "aliyun" ]]; then + s config add --AccountID $3 --AccessKeyID $4 --AccessKeySecret $5 -a $6 -f +elif [[ $1 == "aws" ]]; then + s config add --AccessKeyID $3 --SecretAccessKey $4 -a $5 -f +elif [[ $1 == "tencent" ]]; then + s config add --AccountID $3 --SecretID $4 --SecretKey $5 -a $6 -f +elif [[ $1 == "huawei" ]]; then + s config add --AccessKeyID $3 --SecretAccessKey $4 -a $5 -f +fi +echo '################################################' +echo 'The access has been configured automatically, use "s config get" to check.' + + +# # version=$5 +# # valid_version=( +# # v3.0.0 +# # v3.0.1 +# # v3.0.2 +# # ) +# # if [[ "${valid_version[@]}" =~ "${version}" ]]; then +# echo 'Serverless-devs installing.' +# npm install -g @serverless-devs/s@${version} +# echo 'Serverless-devs has been installed successfully.' +# # curl "https://images.devsapp.cn/bin/s/${version}" --output /usr/local/bin/s +# # chmod 777 /usr/local/bin/s +# fi +# echo '################################################' +# s config add --AccountID $1 --AccessKeyID $2 --AccessKeySecret $3 -a $4 -f +# echo '################################################' +# echo 'The access has been configured automatically, use "s config get" to check.' +# # else +# # echo $version "is not valid, please choose correct version." +# # fi