Skip to content

Commit 54c0115

Browse files
committed
feature action modified
1 parent 71b122e commit 54c0115

File tree

1 file changed

+122
-242
lines changed

1 file changed

+122
-242
lines changed
+122-242
Original file line numberDiff line numberDiff line change
@@ -1,266 +1,146 @@
11
name: Feature Preview
22

33
on:
4+
push:
45
workflow_dispatch:
5-
inputs:
6-
web-build:
7-
required: false
8-
description: "Build Web"
9-
type: boolean
10-
default: true
11-
space-build:
12-
required: false
13-
description: "Build Space"
14-
type: boolean
15-
default: false
16-
admin-build:
17-
required: false
18-
description: "Build Admin"
19-
type: boolean
20-
default: false
216

227
env:
23-
BUILD_WEB: ${{ github.event.inputs.web-build }}
24-
BUILD_SPACE: ${{ github.event.inputs.space-build }}
25-
BUILD_ADMIN: ${{ github.event.inputs.admin-build }}
8+
TARGET_BRANCH: ${{ github.ref_name }}
269

2710
jobs:
28-
setup-feature-build:
29-
name: Feature Build Setup
11+
branch_build_setup:
12+
name: Build Setup
3013
runs-on: ubuntu-latest
31-
steps:
32-
- name: Checkout
33-
run: |
34-
echo "BUILD_WEB=$BUILD_WEB"
35-
echo "BUILD_SPACE=$BUILD_SPACE"
36-
echo "BUILD_ADMIN=$BUILD_ADMIN"
3714
outputs:
38-
web-build: ${{ env.BUILD_WEB}}
39-
space-build: ${{env.BUILD_SPACE}}
40-
admin-build: ${{env.BUILD_ADMIN}}
15+
gh_branch_name: ${{ steps.set_env_variables.outputs.TARGET_BRANCH }}
16+
gh_buildx_driver: ${{ steps.set_env_variables.outputs.BUILDX_DRIVER }}
17+
gh_buildx_version: ${{ steps.set_env_variables.outputs.BUILDX_VERSION }}
18+
gh_buildx_platforms: ${{ steps.set_env_variables.outputs.BUILDX_PLATFORMS }}
19+
gh_buildx_endpoint: ${{ steps.set_env_variables.outputs.BUILDX_ENDPOINT }}
20+
aio_base_tag: ${{ steps.set_env_variables.outputs.AIO_BASE_TAG }}
21+
do_full_build: ${{ steps.set_env_variables.outputs.DO_FULL_BUILD }}
22+
do_slim_build: ${{ steps.set_env_variables.outputs.DO_SLIM_BUILD }}
4123

42-
feature-build-web:
43-
if: ${{ needs.setup-feature-build.outputs.web-build == 'true' }}
44-
needs: setup-feature-build
45-
name: Feature Build Web
46-
runs-on: ubuntu-latest
47-
env:
48-
AWS_ACCESS_KEY_ID: ${{ vars.FEATURE_PREVIEW_AWS_ACCESS_KEY_ID }}
49-
AWS_SECRET_ACCESS_KEY: ${{ secrets.FEATURE_PREVIEW_AWS_SECRET_ACCESS_KEY }}
50-
AWS_BUCKET: ${{ vars.FEATURE_PREVIEW_AWS_BUCKET }}
51-
NEXT_PUBLIC_API_BASE_URL: ${{ vars.FEATURE_PREVIEW_NEXT_PUBLIC_API_BASE_URL }}
5224
steps:
53-
- name: Set up Node.js
54-
uses: actions/setup-node@v4
55-
with:
56-
node-version: "18"
57-
- name: Install AWS cli
58-
run: |
59-
sudo apt-get update
60-
sudo apt-get install -y python3-pip
61-
pip3 install awscli
62-
- name: Checkout
63-
uses: actions/checkout@v4
64-
with:
65-
path: plane
66-
- name: Install Dependencies
67-
run: |
68-
cd $GITHUB_WORKSPACE/plane
69-
yarn install
70-
- name: Build Web
71-
id: build-web
25+
- id: set_env_variables
26+
name: Set Environment Variables
7227
run: |
73-
cd $GITHUB_WORKSPACE/plane
74-
yarn build --filter=web
75-
cd $GITHUB_WORKSPACE
28+
echo "BUILDX_DRIVER=docker-container" >> $GITHUB_OUTPUT
29+
echo "BUILDX_VERSION=latest" >> $GITHUB_OUTPUT
30+
echo "BUILDX_PLATFORMS=linux/amd64" >> $GITHUB_OUTPUT
31+
echo "BUILDX_ENDPOINT=" >> $GITHUB_OUTPUT
32+
echo "AIO_BASE_TAG=develop" >> $GITHUB_OUTPUT
7633
77-
TAR_NAME="web.tar.gz"
78-
tar -czf $TAR_NAME ./plane
34+
echo "TARGET_BRANCH=${{ env.TARGET_BRANCH }}" >> $GITHUB_OUTPUT
7935
80-
FILE_EXPIRY=$(date -u -d "+2 days" +"%Y-%m-%dT%H:%M:%SZ")
81-
aws s3 cp $TAR_NAME s3://${{ env.AWS_BUCKET }}/${{github.sha}}/$TAR_NAME --expires $FILE_EXPIRY
82-
83-
feature-build-space:
84-
if: ${{ needs.setup-feature-build.outputs.space-build == 'true' }}
85-
needs: setup-feature-build
86-
name: Feature Build Space
87-
runs-on: ubuntu-latest
88-
env:
89-
AWS_ACCESS_KEY_ID: ${{ vars.FEATURE_PREVIEW_AWS_ACCESS_KEY_ID }}
90-
AWS_SECRET_ACCESS_KEY: ${{ secrets.FEATURE_PREVIEW_AWS_SECRET_ACCESS_KEY }}
91-
AWS_BUCKET: ${{ vars.FEATURE_PREVIEW_AWS_BUCKET }}
92-
NEXT_PUBLIC_SPACE_BASE_PATH: "/spaces"
93-
NEXT_PUBLIC_API_BASE_URL: ${{ vars.FEATURE_PREVIEW_NEXT_PUBLIC_API_BASE_URL }}
94-
outputs:
95-
do-build: ${{ needs.setup-feature-build.outputs.space-build }}
96-
s3-url: ${{ steps.build-space.outputs.S3_PRESIGNED_URL }}
97-
steps:
98-
- name: Set up Node.js
99-
uses: actions/setup-node@v4
100-
with:
101-
node-version: "18"
102-
- name: Install AWS cli
103-
run: |
104-
sudo apt-get update
105-
sudo apt-get install -y python3-pip
106-
pip3 install awscli
107-
- name: Checkout
36+
- id: checkout_files
37+
name: Checkout Files
10838
uses: actions/checkout@v4
109-
with:
110-
path: plane
111-
- name: Install Dependencies
112-
run: |
113-
cd $GITHUB_WORKSPACE/plane
114-
yarn install
115-
- name: Build Space
116-
id: build-space
117-
run: |
118-
cd $GITHUB_WORKSPACE/plane
119-
yarn build --filter=space
120-
cd $GITHUB_WORKSPACE
121-
122-
TAR_NAME="space.tar.gz"
123-
tar -czf $TAR_NAME ./plane
124-
125-
FILE_EXPIRY=$(date -u -d "+2 days" +"%Y-%m-%dT%H:%M:%SZ")
126-
aws s3 cp $TAR_NAME s3://${{ env.AWS_BUCKET }}/${{github.sha}}/$TAR_NAME --expires $FILE_EXPIRY
12739

128-
feature-build-admin:
129-
if: ${{ needs.setup-feature-build.outputs.admin-build == 'true' }}
130-
needs: setup-feature-build
131-
name: Feature Build Admin
132-
runs-on: ubuntu-latest
40+
full_build_push:
41+
runs-on: ubuntu-20.04
42+
needs: [branch_build_setup]
13343
env:
134-
AWS_ACCESS_KEY_ID: ${{ vars.FEATURE_PREVIEW_AWS_ACCESS_KEY_ID }}
135-
AWS_SECRET_ACCESS_KEY: ${{ secrets.FEATURE_PREVIEW_AWS_SECRET_ACCESS_KEY }}
136-
AWS_BUCKET: ${{ vars.FEATURE_PREVIEW_AWS_BUCKET }}
137-
NEXT_PUBLIC_ADMIN_BASE_PATH: "/god-mode"
138-
NEXT_PUBLIC_API_BASE_URL: ${{ vars.FEATURE_PREVIEW_NEXT_PUBLIC_API_BASE_URL }}
139-
outputs:
140-
do-build: ${{ needs.setup-feature-build.outputs.admin-build }}
141-
s3-url: ${{ steps.build-admin.outputs.S3_PRESIGNED_URL }}
44+
BUILD_TYPE: full
45+
AIO_BASE_TAG: ${{ needs.branch_build_setup.outputs.aio_base_tag }}
46+
AIO_IMAGE_TAGS: makeplane/plane-aio-feature:${{ needs.branch_build_setup.outputs.gh_branch_name }}
47+
TARGET_BRANCH: ${{ needs.branch_build_setup.outputs.gh_branch_name }}
48+
BUILDX_DRIVER: ${{ needs.branch_build_setup.outputs.gh_buildx_driver }}
49+
BUILDX_VERSION: ${{ needs.branch_build_setup.outputs.gh_buildx_version }}
50+
BUILDX_PLATFORMS: ${{ needs.branch_build_setup.outputs.gh_buildx_platforms }}
51+
BUILDX_ENDPOINT: ${{ needs.branch_build_setup.outputs.gh_buildx_endpoint }}
14252
steps:
143-
- name: Set up Node.js
144-
uses: actions/setup-node@v4
145-
with:
146-
node-version: "18"
147-
- name: Install AWS cli
148-
run: |
149-
sudo apt-get update
150-
sudo apt-get install -y python3-pip
151-
pip3 install awscli
152-
- name: Checkout
153-
uses: actions/checkout@v4
53+
- name: Login to Docker Hub
54+
uses: docker/login-action@v3
15455
with:
155-
path: plane
156-
- name: Install Dependencies
157-
run: |
158-
cd $GITHUB_WORKSPACE/plane
159-
yarn install
160-
- name: Build Admin
161-
id: build-admin
162-
run: |
163-
cd $GITHUB_WORKSPACE/plane
164-
yarn build --filter=admin
165-
cd $GITHUB_WORKSPACE
166-
167-
TAR_NAME="admin.tar.gz"
168-
tar -czf $TAR_NAME ./plane
169-
170-
FILE_EXPIRY=$(date -u -d "+2 days" +"%Y-%m-%dT%H:%M:%SZ")
171-
aws s3 cp $TAR_NAME s3://${{ env.AWS_BUCKET }}/${{github.sha}}/$TAR_NAME --expires $FILE_EXPIRY
56+
username: ${{ secrets.DOCKERHUB_USERNAME }}
57+
password: ${{ secrets.DOCKERHUB_TOKEN }}
17258

173-
feature-deploy:
174-
if: ${{ always() && (needs.setup-feature-build.outputs.web-build == 'true' || needs.setup-feature-build.outputs.space-build == 'true' || needs.setup-feature-build.outputs.admin-build == 'true') }}
175-
needs:
176-
[
177-
setup-feature-build,
178-
feature-build-web,
179-
feature-build-space,
180-
feature-build-admin,
181-
]
182-
name: Feature Deploy
183-
runs-on: ubuntu-latest
184-
env:
185-
AWS_ACCESS_KEY_ID: ${{ vars.FEATURE_PREVIEW_AWS_ACCESS_KEY_ID }}
186-
AWS_SECRET_ACCESS_KEY: ${{ secrets.FEATURE_PREVIEW_AWS_SECRET_ACCESS_KEY }}
187-
AWS_BUCKET: ${{ vars.FEATURE_PREVIEW_AWS_BUCKET }}
188-
KUBE_CONFIG_FILE: ${{ secrets.FEATURE_PREVIEW_KUBE_CONFIG }}
189-
steps:
190-
- name: Install AWS cli
191-
run: |
192-
sudo apt-get update
193-
sudo apt-get install -y python3-pip
194-
pip3 install awscli
195-
- name: Tailscale
196-
uses: tailscale/github-action@v2
59+
- name: Set up Docker Buildx
60+
uses: docker/setup-buildx-action@v3
19761
with:
198-
oauth-client-id: ${{ secrets.TAILSCALE_OAUTH_CLIENT_ID }}
199-
oauth-secret: ${{ secrets.TAILSCALE_OAUTH_SECRET }}
200-
tags: tag:ci
201-
- name: Kubectl Setup
202-
run: |
203-
curl -LO "https://dl.k8s.io/release/${{ vars.FEATURE_PREVIEW_KUBE_VERSION }}/bin/linux/amd64/kubectl"
204-
chmod +x kubectl
205-
206-
mkdir -p ~/.kube
207-
echo "$KUBE_CONFIG_FILE" > ~/.kube/config
208-
chmod 600 ~/.kube/config
209-
- name: HELM Setup
210-
run: |
211-
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
212-
chmod 700 get_helm.sh
213-
./get_helm.sh
214-
- name: App Deploy
215-
run: |
216-
WEB_S3_URL=""
217-
if [ ${{ env.BUILD_WEB }} == true ]; then
218-
WEB_S3_URL=$(aws s3 presign s3://${{ vars.FEATURE_PREVIEW_AWS_BUCKET }}/${{github.sha}}/web.tar.gz --expires-in 3600)
219-
fi
220-
221-
SPACE_S3_URL=""
222-
if [ ${{ env.BUILD_SPACE }} == true ]; then
223-
SPACE_S3_URL=$(aws s3 presign s3://${{ vars.FEATURE_PREVIEW_AWS_BUCKET }}/${{github.sha}}/space.tar.gz --expires-in 3600)
224-
fi
225-
226-
ADMIN_S3_URL=""
227-
if [ ${{ env.BUILD_ADMIN }} == true ]; then
228-
ADMIN_S3_URL=$(aws s3 presign s3://${{ vars.FEATURE_PREVIEW_AWS_BUCKET }}/${{github.sha}}/admin.tar.gz --expires-in 3600)
229-
fi
230-
231-
if [ ${{ env.BUILD_WEB }} == true ] || [ ${{ env.BUILD_SPACE }} == true ] || [ ${{ env.BUILD_ADMIN }} == true ]; then
232-
233-
helm --kube-insecure-skip-tls-verify repo add feature-preview ${{ vars.FEATURE_PREVIEW_HELM_CHART_URL }}
62+
driver: ${{ env.BUILDX_DRIVER }}
63+
version: ${{ env.BUILDX_VERSION }}
64+
endpoint: ${{ env.BUILDX_ENDPOINT }}
23465

235-
APP_NAMESPACE="${{ vars.FEATURE_PREVIEW_NAMESPACE }}"
236-
DEPLOY_SCRIPT_URL="${{ vars.FEATURE_PREVIEW_DEPLOY_SCRIPT_URL }}"
237-
238-
METADATA=$(helm --kube-insecure-skip-tls-verify install feature-preview/${{ vars.FEATURE_PREVIEW_HELM_CHART_NAME }} \
239-
--generate-name \
240-
--namespace $APP_NAMESPACE \
241-
--set ingress.primaryDomain=${{vars.FEATURE_PREVIEW_PRIMARY_DOMAIN || 'feature.plane.tools' }} \
242-
--set web.image=${{vars.FEATURE_PREVIEW_DOCKER_BASE}} \
243-
--set web.enabled=${{ env.BUILD_WEB || false }} \
244-
--set web.artifact_url=$WEB_S3_URL \
245-
--set space.image=${{vars.FEATURE_PREVIEW_DOCKER_BASE}} \
246-
--set space.enabled=${{ env.BUILD_SPACE || false }} \
247-
--set space.artifact_url=$SPACE_S3_URL \
248-
--set admin.image=${{vars.FEATURE_PREVIEW_DOCKER_BASE}} \
249-
--set admin.enabled=${{ env.BUILD_ADMIN || false }} \
250-
--set admin.artifact_url=$ADMIN_S3_URL \
251-
--set shared_config.deploy_script_url=$DEPLOY_SCRIPT_URL \
252-
--set shared_config.api_base_url=${{vars.FEATURE_PREVIEW_NEXT_PUBLIC_API_BASE_URL}} \
253-
--output json \
254-
--timeout 1000s)
255-
256-
APP_NAME=$(echo $METADATA | jq -r '.name')
257-
258-
INGRESS_HOSTNAME=$(kubectl get ingress -n feature-builds --insecure-skip-tls-verify \
259-
-o jsonpath='{.items[?(@.metadata.annotations.meta\.helm\.sh\/release-name=="'$APP_NAME'")]}' | \
260-
jq -r '.spec.rules[0].host')
66+
- name: Check out the repo
67+
uses: actions/checkout@v4
26168

262-
echo "****************************************"
263-
echo "APP NAME ::: $APP_NAME"
264-
echo "INGRESS HOSTNAME ::: $INGRESS_HOSTNAME"
265-
echo "****************************************"
266-
fi
69+
- name: Build and Push to Docker Hub
70+
uses: docker/[email protected]
71+
with:
72+
context: .
73+
file: ./aio/Dockerfile-app
74+
platforms: ${{ env.BUILDX_PLATFORMS }}
75+
tags: ${{ env.AIO_IMAGE_TAGS }}
76+
push: true
77+
build-args:
78+
BUILD_TAG=${{ env.AIO_BASE_TAG }}
79+
BUILD_TYPE=${{env.BUILD_TYPE}}
80+
cache-from: type=gha
81+
cache-to: type=gha,mode=max
82+
env:
83+
DOCKER_BUILDKIT: 1
84+
DOCKER_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
85+
DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }}
86+
outputs:
87+
AIO_IMAGE_TAGS: ${{ env.AIO_IMAGE_TAGS }}
88+
89+
# feature-deploy:
90+
# needs: [branch_build_setup, full_build_push]
91+
# name: Feature Deploy
92+
# runs-on: ubuntu-latest
93+
# env:
94+
# AWS_ACCESS_KEY_ID: ${{ vars.FEATURE_PREVIEW_AWS_ACCESS_KEY_ID }}
95+
# AWS_SECRET_ACCESS_KEY: ${{ secrets.FEATURE_PREVIEW_AWS_SECRET_ACCESS_KEY }}
96+
# AWS_BUCKET: ${{ vars.FEATURE_PREVIEW_AWS_BUCKET }}
97+
# KUBE_CONFIG_FILE: ${{ secrets.FEATURE_PREVIEW_KUBE_CONFIG }}
98+
# steps:
99+
# - name: Install AWS cli
100+
# run: |
101+
# sudo apt-get update
102+
# sudo apt-get install -y python3-pip
103+
# pip3 install awscli
104+
# - name: Tailscale
105+
# uses: tailscale/github-action@v2
106+
# with:
107+
# oauth-client-id: ${{ secrets.TAILSCALE_OAUTH_CLIENT_ID }}
108+
# oauth-secret: ${{ secrets.TAILSCALE_OAUTH_SECRET }}
109+
# tags: tag:ci
110+
# - name: Kubectl Setup
111+
# run: |
112+
# curl -LO "https://dl.k8s.io/release/${{ vars.FEATURE_PREVIEW_KUBE_VERSION }}/bin/linux/amd64/kubectl"
113+
# chmod +x kubectl
114+
115+
# mkdir -p ~/.kube
116+
# echo "$KUBE_CONFIG_FILE" > ~/.kube/config
117+
# chmod 600 ~/.kube/config
118+
# - name: HELM Setup
119+
# run: |
120+
# curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
121+
# chmod 700 get_helm.sh
122+
# ./get_helm.sh
123+
# - name: App Deploy
124+
# run: |
125+
# helm --kube-insecure-skip-tls-verify repo add feature-preview ${{ vars.FEATURE_PREVIEW_HELM_CHART_URL }}
126+
127+
# APP_NAMESPACE="${{ vars.FEATURE_PREVIEW_NAMESPACE }}"
128+
129+
# METADATA=$(helm --kube-insecure-skip-tls-verify install feature-preview/${{ vars.FEATURE_PREVIEW_HELM_CHART_NAME }} \
130+
# --generate-name \
131+
# --namespace $APP_NAMESPACE \
132+
# --set ingress.primaryDomain=${{vars.FEATURE_PREVIEW_PRIMARY_DOMAIN || 'feature.plane.tools' }} \
133+
# --set web.image=${{vars.FEATURE_PREVIEW_DOCKER_BASE}} \
134+
# --output json \
135+
# --timeout 1000s)
136+
137+
# APP_NAME=$(echo $METADATA | jq -r '.name')
138+
139+
# INGRESS_HOSTNAME=$(kubectl get ingress -n feature-builds --insecure-skip-tls-verify \
140+
# -o jsonpath='{.items[?(@.metadata.annotations.meta\.helm\.sh\/release-name=="'$APP_NAME'")]}' | \
141+
# jq -r '.spec.rules[0].host')
142+
143+
# echo "****************************************"
144+
# echo "APP NAME ::: $APP_NAME"
145+
# echo "INGRESS HOSTNAME ::: $INGRESS_HOSTNAME"
146+
# echo "****************************************"

0 commit comments

Comments
 (0)