-
Notifications
You must be signed in to change notification settings - Fork 1
159 lines (142 loc) · 6 KB
/
build-twilio-flex-plugin.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
name: "Build Twilio Flex Plugin and Publish Artifact"
on:
workflow_call:
inputs:
PLUGIN_DIRECTORY:
type: string
required: true
description: The path to the Flex Plugin base directory (where package.json is located)
BUILD_COMMAND:
type: string
required: true
description: The build command
BUILD_COMMAND_DIRECTORY:
type: string
required: false
description: (Optional) defaults to install directory
INSTALL_DIRECTORY:
type: string
required: false
default: .
description: (Optional) The path to the directory to call yarn install in. Defaults to root
INSTALL_FLAGS:
type: string
required: false
description: (Optional) Override yarn install flags
default: "--immutable --immutable-cache"
NODE_VERSION:
type: string
required: false
description: (Optional) Override Node Version (Default to engines.node or 18 if not found)
ARTIFACT_RETENTION_PERIOD:
type: number
required: false
description: (Optional) Override the number of days (default 3 days) the build artifact is retained. Must be between 1-90 days
default: 3
YARN_DIRECTORY_PATH:
type: string
required: false
description: (Optional) Set if the .yarn directory is outside of the INSTALL_DIRECTORY
SKIP_CLI_INSTALL:
type: boolean
required: false
description: |
Set to `true` to skip the installation of Twilio CLI + Flex CLI.
This can be used if your plugin build command uses `flex-plugin build` directly instead of the CLI command `twilio flex:plugins:build`.
The install flags will have `--mode=skip-build` appended to them to avoid running the postinstall command that checks for the CLI installation.
jobs:
build_flex_plugin:
runs-on: ubuntu-22.04
env:
PLUGIN_DIR: ${{ inputs.PLUGIN_DIRECTORY != '' && inputs.PLUGIN_DIRECTORY || '.' }}
INSTALL_DIR: ${{ inputs.INSTALL_DIRECTORY != '' && inputs.INSTALL_DIRECTORY || '.' }}
NODE_VERSION: ${{ inputs.NODE_VERSION }}
steps:
- name: Resolve Input Paths
run: |
pluginDir="${{ inputs.PLUGIN_DIRECTORY }}"
if [[ "$pluginDir" =~ \./.* ]]; then
echo "PLUGIN_DIR=${pluginDir:2}" >> "$GITHUB_ENV"
fi
installDir="${{ inputs.INSTALL_DIRECTORY }}"
if [[ "$installDir" =~ \./.* ]]; then
echo "INSTALL_DIR=${installDir:2}" >> "$GITHUB_ENV"
fi
- name: Checkout ${{ github.repository }}@${{ github.ref_name }}
uses: actions/checkout@v4
with:
path: main
sparse-checkout: |
${{ env.INSTALL_DIR != '.' && env.INSTALL_DIR || '' }}
${{ inputs.YARN_DIRECTORY_PATH }}
- name: Checkout zingdevlimited/actions-helpers@v3
uses: actions/checkout@v4
with:
repository: zingdevlimited/actions-helpers
path: helpers
ref: v3
- name: Resolve Dependencies
run: |
if [ "${{ env.INSTALL_DIR }}" == "." ]; then
echo "CACHE_DEPENDENCY_PATH=main/yarn.lock" >> "$GITHUB_ENV"
else
echo "CACHE_DEPENDENCY_PATH=main/${{ env.INSTALL_DIR }}/yarn.lock" >> "$GITHUB_ENV"
fi
if [ -z "${{ inputs.NODE_VERSION }}" ]; then
nodeVer=$(cat main/${{ env.PLUGIN_DIR }}/package.json | jq -r '.engines.node // empty')
if [ -z "$nodeVer" ]; then
nodeVer=$(cat main/${{ env.INSTALL_DIR }}/package.json | jq -r '.engines.node // empty')
fi
if [ -z "$nodeVer" ]; then
nodeVer="18.x"
fi
fi
echo "NODE_VERSION=$nodeVer" >> "$GITHUB_ENV"
- name: Set up Node ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: yarn
cache-dependency-path: ${{ env.CACHE_DEPENDENCY_PATH }}
- name: Setup Flex CLI
if: ${{ inputs.SKIP_CLI_INSTALL != true }}
uses: ./helpers/setup-flex-cli
with:
PLUGIN_DIRECTORY: main/${{ env.PLUGIN_DIR }}
- name: Get Plugin Properties
id: pluginProperties
working-directory: main/${{ env.PLUGIN_DIR }}
run: |
PLUGIN_NAME=$(cat package.json | jq -r '.name')
echo "PLUGIN_NAME=$PLUGIN_NAME" >> $GITHUB_OUTPUT
PLUGIN_VERSION=$(cat package.json | jq -r '.version')
echo "PLUGIN_VERSION=$PLUGIN_VERSION" >> $GITHUB_OUTPUT
- name: Install Dependencies
working-directory: main/${{ env.INSTALL_DIR }}
run: yarn install ${{ inputs.INSTALL_FLAGS }} ${{ inputs.SKIP_CLI_INSTALL == true && '--mode=skip-build' || '' }}
- name: Copy Required Dependencies to Workspace
if: ${{ inputs.SKIP_CLI_INSTALL == true }}
working-directory: main
run: |
requiredModules=(
"@twilio/flex-ui"
"react-dom"
"react"
)
for module in "${requiredModules[@]}"; do
mkdir -p "${{ env.PLUGIN_DIR }}/node_modules/$module"
cp "${{ env.INSTALL_DIR }}/node_modules/$module/package.json" "${{ env.PLUGIN_DIR }}/node_modules/$module/package.json"
done
- name: Build ${{ steps.pluginProperties.outputs.PLUGIN_NAME }}
working-directory: main/${{ inputs.BUILD_COMMAND_DIRECTORY != '' && inputs.BUILD_COMMAND_DIRECTORY || env.INSTALL_DIR }}
run: ${{ inputs.BUILD_COMMAND }}
env:
TWILIO_ACCOUNT_SID: ACX # Dummy credentials for CLI. Not needed to build
TWILIO_AUTH_TOKEN: X
- name: Upload Build Artifact
uses: actions/upload-artifact@v4
with:
name: "${{ steps.pluginProperties.outputs.PLUGIN_NAME }}@${{ steps.pluginProperties.outputs.PLUGIN_VERSION }}"
path: main/${{ env.PLUGIN_DIR }}/build
retention-days: ${{ inputs.ARTIFACT_RETENTION_PERIOD }}
if-no-files-found: error