Skip to content

fix(desktop): implement adaptive clipboard strategy for Safari #2222

fix(desktop): implement adaptive clipboard strategy for Safari

fix(desktop): implement adaptive clipboard strategy for Safari #2222

Workflow file for this run

name: Build Frontends Image
on:
workflow_call:
inputs:
push_image:
description: "Push image"
required: false
type: boolean
default: false
push_image_tag:
description: "Push image tag"
default: "latest"
required: false
type: string
force_all:
description: "Force build all modules (for release)"
default: false
required: false
type: boolean
workflow_dispatch:
inputs:
push_image:
description: "Push image"
required: false
type: boolean
default: false
push_image_tag:
description: "Push image tag"
default: "latest"
required: false
type: string
push:
branches: ["*"]
paths:
- "frontend/desktop/**"
- "frontend/providers/**"
- "frontend/packages/**"
- "frontend/package.json"
- "frontend/pnpm-lock.yaml"
- "frontend/pnpm-workspace.yaml"
- "frontend/tsconfig*.json"
- ".github/workflows/frontend.yml"
- ".github/workflows/frontends.yml"
- "!**/*.md"
pull_request:
branches: ["*"]
paths:
- "frontend/desktop/**"
- "frontend/providers/**"
- "frontend/packages/**"
- "frontend/package.json"
- "frontend/pnpm-lock.yaml"
- "frontend/pnpm-workspace.yaml"
- "frontend/tsconfig*.json"
- ".github/workflows/frontend.yml"
- ".github/workflows/frontends.yml"
- "!**/*.md"
# Avoid using ${{ github.workflow }} - when called via workflow_call, it inherits the caller's name causing conflicts
concurrency:
group: frontends-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
detect-changes:
runs-on: ubuntu-latest
outputs:
modules: ${{ steps.set-matrix.outputs.modules }}
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
packages:
- 'frontend/packages/**'
root-config:
- 'frontend/package.json'
- 'frontend/pnpm-lock.yaml'
- 'frontend/pnpm-workspace.yaml'
- 'frontend/tsconfig*.json'
- '.github/workflows/frontend.yml'
- '.github/workflows/frontends.yml'
aiproxy:
- 'frontend/providers/aiproxy/**'
license:
- 'frontend/providers/license/**'
cronjob:
- 'frontend/providers/cronjob/**'
template:
- 'frontend/providers/template/**'
applaunchpad:
- 'frontend/providers/applaunchpad/**'
terminal:
- 'frontend/providers/terminal/**'
dbprovider:
- 'frontend/providers/dbprovider/**'
costcenter:
- 'frontend/providers/costcenter/**'
objectstorage:
- 'frontend/providers/objectstorage/**'
kubepanel:
- 'frontend/providers/kubepanel/**'
devbox:
- 'frontend/providers/devbox/**'
desktop:
- 'frontend/desktop/**'
- name: Generate build matrix
id: set-matrix
run: |
modules=()
# Check if we need to build all modules
if [[ "${{ steps.filter.outputs.packages }}" == "true" || \
"${{ steps.filter.outputs.root-config }}" == "true" || \
"${{ inputs.force_all }}" == "true" || \
"${{ github.event_name }}" == "workflow_dispatch" ]]; then
modules=(
"providers/aiproxy"
"providers/license"
"providers/cronjob"
"providers/template"
"providers/applaunchpad"
"providers/terminal"
"providers/dbprovider"
"providers/costcenter"
"providers/objectstorage"
"providers/kubepanel"
"providers/devbox"
"desktop"
)
else
# Only build changed modules
[[ "${{ steps.filter.outputs.aiproxy }}" == "true" ]] && modules+=("providers/aiproxy")
[[ "${{ steps.filter.outputs.license }}" == "true" ]] && modules+=("providers/license")
[[ "${{ steps.filter.outputs.cronjob }}" == "true" ]] && modules+=("providers/cronjob")
[[ "${{ steps.filter.outputs.template }}" == "true" ]] && modules+=("providers/template")
[[ "${{ steps.filter.outputs.applaunchpad }}" == "true" ]] && modules+=("providers/applaunchpad")
[[ "${{ steps.filter.outputs.terminal }}" == "true" ]] && modules+=("providers/terminal")
[[ "${{ steps.filter.outputs.dbprovider }}" == "true" ]] && modules+=("providers/dbprovider")
[[ "${{ steps.filter.outputs.costcenter }}" == "true" ]] && modules+=("providers/costcenter")
[[ "${{ steps.filter.outputs.objectstorage }}" == "true" ]] && modules+=("providers/objectstorage")
[[ "${{ steps.filter.outputs.kubepanel }}" == "true" ]] && modules+=("providers/kubepanel")
[[ "${{ steps.filter.outputs.devbox }}" == "true" ]] && modules+=("providers/devbox")
[[ "${{ steps.filter.outputs.desktop }}" == "true" ]] && modules+=("desktop")
fi
# Convert to JSON array (compact format for GitHub Actions)
if [ ${#modules[@]} -eq 0 ]; then
json_modules="[]"
else
json_modules=$(printf '%s\n' "${modules[@]}" | jq -R . | jq -s -c .)
fi
echo "modules=$json_modules" >> $GITHUB_OUTPUT
echo "Building modules: $json_modules"
image-build:
needs: detect-changes
if: needs.detect-changes.outputs.modules != '[]'
uses: ./.github/workflows/frontend.yml
permissions:
contents: read
packages: write
secrets: inherit
strategy:
fail-fast: false
matrix:
module: ${{ fromJSON(needs.detect-changes.outputs.modules) }}
with:
module: ${{ matrix.module }}
push_image: ${{ (github.event_name == 'push') || (github.event_name == 'create') || (inputs.push_image == true) }}
push_image_tag: ${{ inputs.push_image_tag }}