Skip to content

Commit

Permalink
feat: setup-s v1
Browse files Browse the repository at this point in the history
  • Loading branch information
huyikun.hyk committed Feb 27, 2024
1 parent 6393940 commit c93589d
Show file tree
Hide file tree
Showing 5 changed files with 375 additions and 2 deletions.
73 changes: 73 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -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

98 changes: 96 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,96 @@
# setup-s
使用 GitHub Actions 自动化配置 Serverless Devs 环境,该工作流将预装必要的工具并设定相关的云服务账户凭证。这个过程简化了在 GitHub Actions 平台上的 Serverless 应用部署,确保每次推送代码或发起合并请求时,Serverless 应用都能在预配置的环境中快速、一致地被构建和发布。
# setup-s-aliyun
<p align="center">
<span><b><a href="./README.md">中文</a> | <a href="./README_en.md">English</a></b></span><br>
</p>

基于阿里云函数计算的 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|
99 changes: 99 additions & 0 deletions README_en.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# setup-s-aliyun
<p align="center">
<span><b><a href="./README.md">中文</a> | <a href="./README_en.md">English</a></b></span><br>
</p>

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 |
55 changes: 55 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
@@ -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'
52 changes: 52 additions & 0 deletions script.sh
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit c93589d

Please sign in to comment.