Merge pull request #21 from teaxyz/preview-ci

#11 initialize web preview
This commit is contained in:
Neil 2022-11-23 20:27:01 +08:00 committed by GitHub
commit d206d95227
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 170 additions and 17 deletions

43
.github/create-invalidate-preview.sh vendored Executable file
View file

@ -0,0 +1,43 @@
#!/bin/bash
# 0. check if cloudfront exists with this prefix folder
# if exists
# invalidate
# else
# create cloudfront distribution
# echo cloudfront_domain=domain >> $GITHUB_OUTPUT
prefix=$1
echo $(aws cloudfront list-distributions --output json) >> ./test.json
data=$(cat ./test.json)
distribution_id="NONE"
domain=""
for row in $(jq '.DistributionList.Items[] | @base64' < './test.json'); do
_jq() {
echo $row | tr -d '"' | base64 --decode | jq -r "${1}" | tr -d '"'
}
comment=$(_jq '.Comment')
if [[ $comment = $prefix ]]
then
distribution_id=$(_jq '.Id')
domain=$(_jq '.DomainName')
fi
done
if [[ $distribution_id = NONE ]]
then
# config vars: TargetOriginId, Origin.Items.Id, Origin.Items.OriginPath, CallerReference, Comment
config=$(cat .github/template.json)
config=$(echo $config | sed -e "s/{{prefix}}/$prefix/g" | sed -e "s/{{caller_reference}}/$prefix/g")
new_config=$(aws cloudfront create-distribution --distribution-config "$config")
distribution_id=$(echo $new_config | jq '.Distribution.Id' | tr -d '"')
domain=$(echo $new_config | jq '.Distribution.DomainName' | tr -d '"')
aws cloudfront wait distribution-deployed --id $distribution_id
else
invalidation_id=$(aws cloudfront create-invalidation --distribution-id $distribution_id --paths /* | jq '.Invalidation.Id' | tr -d '"')
aws cloudfront wait invalidation-completed --distribution-id $distribution_id --id $invalidation_id
fi
echo "domain=$domain" >> $GITHUB_OUTPUT

83
.github/template.json vendored Normal file
View file

@ -0,0 +1,83 @@
{
"Comment": "{{prefix}}",
"CacheBehaviors": {
"Quantity": 0
},
"Origins": {
"Items": [
{
"Id": "preview.gui.tea.xyz.s3-website.us-east-1.amazonaws.com-{{prefix}}",
"DomainName": "preview.gui.tea.xyz.s3-website.us-east-1.amazonaws.com",
"OriginPath": "/{{prefix}}",
"CustomHeaders": {
"Quantity": 0
},
"CustomOriginConfig": {
"HTTPPort": 80,
"HTTPSPort": 443,
"OriginProtocolPolicy": "http-only",
"OriginSslProtocols": {
"Quantity": 1,
"Items": [
"TLSv1.2"
]
},
"OriginReadTimeout": 30,
"OriginKeepaliveTimeout": 5
},
"ConnectionAttempts": 3,
"ConnectionTimeout": 10,
"OriginShield": {
"Enabled": false
}
}
],
"Quantity": 1
},
"DefaultRootObject": "index.html",
"PriceClass": "PriceClass_All",
"Enabled": true,
"DefaultCacheBehavior": {
"TrustedSigners": {
"Enabled": false,
"Quantity": 0
},
"TargetOriginId": "preview.gui.tea.xyz.s3-website.us-east-1.amazonaws.com-{{prefix}}",
"ViewerProtocolPolicy": "allow-all",
"ForwardedValues": {
"Headers": {
"Quantity": 0
},
"Cookies": {
"Forward": "none"
},
"QueryString": false
},
"SmoothStreaming": false,
"AllowedMethods": {
"Items": [
"GET",
"HEAD"
],
"Quantity": 2
},
"MinTTL": 0
},
"CallerReference": "{{caller_reference}}",
"ViewerCertificate": {
"CloudFrontDefaultCertificate": true
},
"CustomErrorResponses": {
"Quantity": 0
},
"Restrictions": {
"GeoRestriction": {
"RestrictionType": "none",
"Quantity": 0
}
},
"Aliases": {
"Quantity": 0
}
}

View file

@ -8,6 +8,7 @@ jobs:
outputs: outputs:
svelte: ${{steps.svelte.outputs.src}} svelte: ${{steps.svelte.outputs.src}}
tauri: ${{steps.tauri.outputs.src}} tauri: ${{steps.tauri.outputs.src}}
preview_folder: ${{steps.preview.outputs.folder}}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- uses: dorny/paths-filter@v2 - uses: dorny/paths-filter@v2
@ -23,6 +24,11 @@ jobs:
filters: | filters: |
src: src:
- 'packages/gui/src-tauri/**' - 'packages/gui/src-tauri/**'
- name: get s3 preview folder
id: preview
run: |
preview=$(echo $GITHUB_REF_NAME | sed -e 's/\//-/g')
echo "folder=$preview" >> $GITHUB_OUTPUT
build_svelte: build_svelte:
needs: changes needs: changes
if: needs.changes.outputs.svelte == 'true' if: needs.changes.outputs.svelte == 'true'
@ -51,6 +57,29 @@ jobs:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1 aws-region: us-east-1
- name: sync web files into preview folder
env:
prefix: ${{ needs.changes.outputs.preview_folder }}
run: |
aws s3 sync ./packages/gui/build \
"s3://preview.gui.tea.xyz/$prefix"
- name: Install package
run: sudo apt-get install -y jq coreutils
- name: setup preview
id: preview_setup
run: .github/create-invalidate-preview.sh ${{ needs.changes.outputs.preview_folder }}
- name: comment preview site
uses: mshick/add-pr-comment@v2
with:
message-id: preview-comment-${{needs.changes.outputs.preview_folder}}
message: |
**preview is at**: [https://${{steps.preview_setup.outputs.domain}}](https://${{steps.preview_setup.outputs.domain}})
```bash
https://${{steps.preview_setup.outputs.domain}}
```
copy-paste into a browser to view
build_tauri: build_tauri:
needs: changes needs: changes
if: needs.changes.outputs.tauri == 'true' if: needs.changes.outputs.tauri == 'true'
@ -109,16 +138,10 @@ jobs:
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1 aws-region: us-east-1
- name: get s3 folder
id: prefix
run: |
prefix=$(echo $GITHUB_REF_NAME | sed -e 's/\//-/g')
echo "prefix=$prefix" >> $GITHUB_OUTPUT
- name: mac-os cp package images from prod to preview bucket - name: mac-os cp package images from prod to preview bucket
if: matrix.platform == 'macos-latest' if: matrix.platform == 'macos-latest'
env: env:
prefix: ${{ steps.prefix.outputs.prefix }} prefix: ${{ needs.changes.outputs.preview_folder }}
run: | run: |
aws s3 cp ./packages/gui/src-tauri/target/release/bundle/dmg/gui_0.1.0_x64.dmg \ aws s3 cp ./packages/gui/src-tauri/target/release/bundle/dmg/gui_0.1.0_x64.dmg \
"s3://preview.gui.tea.xyz/$prefix/gui.dmg" "s3://preview.gui.tea.xyz/$prefix/gui.dmg"
@ -126,7 +149,7 @@ jobs:
- name: ubuntu cp package images from prod to preview bucket - name: ubuntu cp package images from prod to preview bucket
if: matrix.platform == 'ubuntu-latest' if: matrix.platform == 'ubuntu-latest'
env: env:
prefix: ${{ steps.prefix.outputs.prefix }} prefix: ${{ needs.changes.outputs.preview_folder }}
run: | run: |
aws s3 cp ./packages/gui/src-tauri/target/release/bundle/deb/gui_0.1.0_amd64.deb \ aws s3 cp ./packages/gui/src-tauri/target/release/bundle/deb/gui_0.1.0_amd64.deb \
"s3://preview.gui.tea.xyz/$prefix/gui.deb" "s3://preview.gui.tea.xyz/$prefix/gui.deb"
@ -139,7 +162,7 @@ jobs:
message: | message: |
**installer for ${{ matrix.platform }} is at**: [here](http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/${{steps.prefix.outputs.prefix}}/gui.deb) **installer for ${{ matrix.platform }} is at**: [here](http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/${{steps.prefix.outputs.prefix}}/gui.deb)
```bash ```bash
http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/${{steps.prefix.outputs.prefix}}/gui.deb http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/${{ needs.changes.outputs.preview_folder }}/gui.deb
``` ```
copy-paste into a browser to download copy-paste into a browser to download
@ -152,6 +175,6 @@ jobs:
message: | message: |
**installer for ${{ matrix.platform }} is at**: [here](http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/${{steps.prefix.outputs.prefix}}/gui.dmg) **installer for ${{ matrix.platform }} is at**: [here](http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/${{steps.prefix.outputs.prefix}}/gui.dmg)
```bash ```bash
http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/${{steps.prefix.outputs.prefix}}/gui.dmg http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/${{ needs.changes.outputs.preview_folder }}/gui.dmg
``` ```
copy-paste into a browser to download copy-paste into a browser to download

View file

@ -50,7 +50,11 @@ jobs:
toolchain: stable toolchain: stable
- name: install app dependencies and build it - name: install app dependencies and build it
run: pnpm install && pnpm --filter gui build run: pnpm install && pnpm --filter gui build
- uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
build_tauri: build_tauri:
needs: changes needs: changes
if: needs.changes.outputs.tauri == 'true' if: needs.changes.outputs.tauri == 'true'

View file

@ -2,11 +2,6 @@
@tailwind components; @tailwind components;
@tailwind utilities; @tailwind utilities;
html {
background-color: #1a1a1a;
color: #fff;
}
@font-face { @font-face {
font-family: "pp-neue-machina"; font-family: "pp-neue-machina";
src: url("../static/fonts/PPNeueMachina-InktrapLight.woff"); src: url("../static/fonts/PPNeueMachina-InktrapLight.woff");
@ -17,6 +12,11 @@ html {
src: url("../static/fonts/Sono-Light.woff2"); src: url("../static/fonts/Sono-Light.woff2");
} }
html {
background-color: #1a1a1a;
color: #fff;
}
@layer base { @layer base {
html { html {
font-family: sono, sans-serif; font-family: sono, sans-serif;

View file

@ -1,4 +1,4 @@
# Tea UI # @tea/ui
Isolated set of UI elements/components that can be reused across all svelte related apps of tea. Components here have to be maintained as much as possible as a [dumb/presentational components](https://medium.com/@thejasonfile/dumb-components-and-smart-components-e7b33a698d43). Isolated set of UI elements/components that can be reused across all svelte related apps of tea. Components here have to be maintained as much as possible as a [dumb/presentational components](https://medium.com/@thejasonfile/dumb-components-and-smart-components-e7b33a698d43).
## Developing ## Developing