diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
new file mode 100644
index 0000000..bcd5bde
--- /dev/null
+++ b/.github/workflows/deploy.yml
@@ -0,0 +1,50 @@
+name: Deploy to GitHub Pages
+
+env:
+ PROJECT_PATH: demo/Semi.Avalonia.Demo.Web/Semi.Avalonia.Demo.Web.csproj
+ OUTPUT_PATH: demo/Semi.Avalonia.Demo.Web/bin/Debug/net7.0/browser-wasm/AppBundle
+on:
+ push:
+ branches: [ "deploy" ]
+ pull_request:
+ branches: [ "deploy" ]
+
+jobs:
+ deploy-to-github-pages:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Setup .NET Core SDK
+ uses: actions/setup-dotnet@v1.9.0
+
+ - name: Install wasm-tools
+ run: dotnet workload install wasm-tools wasm-experimental
+
+ - name: Install DotNetCompress
+ run: dotnet tool install --global DotNetCompress --version 2.0.0 --no-cache
+
+ - name: Publish .NET Project
+ run: dotnet publish $PROJECT_PATH -c Debug -o debug --nologo
+
+ - name: Change base-tag in index.html
+ run: sed -i 's///g' $OUTPUT_PATH/index.html
+
+ - name: copy index.html to 404.html
+ run: cp $OUTPUT_PATH/index.html $OUTPUT_PATH/404.html
+
+ - name: Compress Output using Brotli
+ run: DotNetCompress -d $OUTPUT_PATH -p "*.dll" "*.js" "*.wasm" --format br --threads 4
+
+ - name: Compress Output using GZip
+ run: DotNetCompress -d $OUTPUT_PATH -p "*.dll" "*.js" "*.wasm" --format gz --threads 4
+
+ - name: Add .nojekyll file
+ run: touch $OUTPUT_PATH/.nojekyll
+
+ - name: Commit wwwroot to GitHub Pages
+ uses: JamesIves/github-pages-deploy-action@4.1.7
+ with:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ BRANCH: gh-pages
+ FOLDER: ${{ env.OUTPUT_PATH }}