Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
5eb9ad3
feat: arm64 build worker test
rikled Jun 19, 2026
70721a2
fix: improve build process in linux -> fixes arm workflow bug
rikled Jun 20, 2026
c3f1084
fix: common pathes in workflow
rikled Jun 20, 2026
17c8235
chore: change subprojects to current qt6 migration
rikled Jun 26, 2026
4189cb6
fix: file export is buggy, use compressed files
rikled Jun 26, 2026
5c1d70d
fix: some bugs in workflow, remove v141 installation, no longer neede…
rikled Jun 26, 2026
efc895e
fix: ossl target for arm, arm desktop must be built on ubuntu 24
rikled Jun 26, 2026
7791630
chore: update submodule, remove core-base from common build
rikled Jun 26, 2026
41f005c
fix: remove core-base also from workflow common build
rikled Jun 26, 2026
2bc23b7
fix: attempt to fix version clash, update submodule
rikled Jun 26, 2026
cfe2cb7
chore: update submodules, fix tag of inno languages
rikled Jun 27, 2026
d01726d
fix: another attempt to fix inno languages
rikled Jun 27, 2026
8b60d9b
feat: crosscompile v8, openssl for windows arm build
rikled Jun 27, 2026
eca6ae7
fix: cross compilation bugs
rikled Jun 27, 2026
651885d
chore: try to build v8 on arm
rikled Jun 27, 2026
086483e
fix: readd v8 to crosscompile, fix gn tools build process of v8
rikled Jun 27, 2026
b844b74
chore: update submodules, revert gitmodules back to main EO repo
rikled Jun 30, 2026
bbc4e22
chore: update submodules
rikled Jun 30, 2026
a67d918
chore: update submodules
rikled Jun 30, 2026
c6a987a
chore: update submodules
rikled Jun 30, 2026
017cf0d
fix: add aqt installation to installdep step, update submodules
rikled Jul 1, 2026
4676878
chore: update submodules
rikled Jul 1, 2026
84f6820
fix: broken newline
rikled Jul 1, 2026
86f1327
chore: update submodules
rikled Jul 1, 2026
3eed7dc
chore: update submodules
rikled Jul 1, 2026
90bb2ac
chore: update submodules
rikled Jul 1, 2026
7d38e37
chore: update submodules
rikled Jul 1, 2026
b989da7
chore: merge prep: update submodules to current main
rikled Jul 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
151 changes: 114 additions & 37 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +133,6 @@ jobs:
# Targets with empty tags= are not pushed regardless of this flag.
push: false
set: |
core-base.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-${{ matrix.brand.cache_prefix }}core-base-buildcache
core-base.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-${{ matrix.brand.cache_prefix }}core-base-buildcache,mode=max
core-base.tags=
core-wasm.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-${{ matrix.brand.cache_prefix }}core-wasm-buildcache
core-wasm.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-${{ matrix.brand.cache_prefix }}core-wasm-buildcache,mode=max
core-wasm.tags=
Expand All @@ -151,7 +148,7 @@ jobs:
desktop-common.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-${{ matrix.brand.cache_prefix }}desktop-common-buildcache
desktop-common.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-${{ matrix.brand.cache_prefix }}desktop-common-buildcache,mode=max
desktop-common.tags=${{format('{0}/{1}:{2}', env.REGISTRY, matrix.brand.image_name, steps.meta.outputs.sha_short)}}
desktop-common.output=type=image,push=true
desktop-common.output=type=tar,dest=./common.tar
env:
REGISTRY: ${{ env.REGISTRY }}
PRODUCT_VERSION: ${{ steps.meta.outputs.product_version }}
Expand All @@ -161,21 +158,80 @@ jobs:
NEXTCLOUD_USER: ${{ secrets.NEXTCLOUD_USER }}
NEXTCLOUD_PASS: ${{ secrets.NEXTCLOUD_PASS }}

- name: Extract files from image
run: |
docker create --name tmp ${{ env.REGISTRY }}/${{ matrix.brand.image_name }}:${{ steps.meta.outputs.sha_short }} true
docker cp tmp:/ ./common
docker rm tmp
- uses: actions/upload-artifact@v4
with:
name: common-files
path: |
common
path: ./build/common.tar # was ./build/common
compression-level: 0


crosscompile-3rdparty-arm64:
runs-on: windows-2022 # x64 host that cross-compiles to arm64
env:
PYTHONUTF8: "1"
DEPOT_TOOLS_WIN_TOOLCHAIN: "0" # V8: use the locally installed VS, not Google's toolchain
NEXTCLOUD_USER: ${{ secrets.NEXTCLOUD_USER }} # required: ensure_dep uploads here
NEXTCLOUD_PASS: ${{ secrets.NEXTCLOUD_PASS }}

steps:
- name: Checkout fork repository (with submodules)
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
path: .
submodules: recursive
token: ${{ secrets.EURO_OFFICE_MIRROR_TOKEN }}

# windows-2022 ships VS2022 but not always the ARM64 *target* tools.
# clang-cl (V8) links arm64 against the arm64 Windows SDK libs;
# cl.exe (OpenSSL) needs the amd64_arm64 toolset. Add both.
- name: Add ARM64 build tools to Visual Studio
shell: pwsh
run: |
$vsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
$vsInstaller = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vs_installer.exe"
$installPath = & $vsWhere -latest -products * -property installationPath
& $vsInstaller modify `
--installPath $installPath `
--add Microsoft.VisualStudio.Component.VC.Tools.ARM64 `
--add Microsoft.VisualStudio.Component.VC.ATL.ARM64 `
--add Microsoft.VisualStudio.Component.VC.MFC.ARM64 `
--quiet --norestart --force
if ($LASTEXITCODE -notin @(0, 3010)) {
Write-Warning "vs_installer returned $LASTEXITCODE - components may already be present, continuing."
}


# Sets the amd64_arm64 cross environment for all later steps, incl.
# VSCMD_ARG_TGT_ARCH=arm64 -- the single signal openssl, v8 and the
# cache tag all key off of.
- name: Set up arm64 cross MSVC environment
uses: ilammy/msvc-dev-cmd@v1
with:
arch: amd64_arm64


# ASSUMPTION: build_3rdparty.py can be told to *target* arm64 while
# running on an x64 host. If it only builds host-arch today, that's the
# gap to close first (see notes in chat: V8 -> target_cpu="arm64";
# OpenSSL -> Configure VC-WIN64-ARM under the amd64_arm64 MSVC env).
- name: Cross-compile arm64 third-party (V8, OpenSSL)
shell: pwsh
run: |
python ${{ github.workspace }}\core\Common\3dParty\build_3rdparty.py `
--only=v8,openssl `
"${{ github.workspace }}\workdir" `
"${{ github.workspace }}\installdir"

build-windows:
runs-on: windows-2022
needs: build-common

build-windows:
runs-on: ${{ matrix.arch == 'arm64' && 'windows-11-arm' || 'windows-2022' }}
needs: [build-common, crosscompile-3rdparty-arm64]
strategy:
fail-fast: false
matrix:
arch:
- amd64
- arm64
env:
PYTHONUTF8: "1"
NEXTCLOUD_USER: ${{ secrets.NEXTCLOUD_USER }}
Expand All @@ -201,7 +257,13 @@ jobs:
- uses: actions/download-artifact@v4
with:
name: common-files
path: .\common
path: . # lands as .\common.tar

- name: Extract common
shell: pwsh
run: |
New-Item -ItemType Directory -Force -Path .\common | Out-Null
tar -xf .\common.tar -C .\common # bsdtar ships with windows-2022/arm runners

# Install Cygwin WITHOUT touching PATH (the script does the PATH ordering).
# add-to-path:false stops the action from prepending C:\cygwin\bin and
Expand All @@ -219,22 +281,26 @@ jobs:
python3
python3-devel

- name: Install Windows SDK, v141 toolset and ATL
- name: Install aqtinstall
shell: pwsh
run: |
$vsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
$vsInstaller = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vs_installer.exe"
$installPath = & $vsWhere -latest -products * -property installationPath
& $vsInstaller modify `
--installPath $installPath `
--add Microsoft.VisualStudio.Component.Windows10SDK.19041 `
--add Microsoft.VisualStudio.Component.VC.v141.x86.x64 `
--add Microsoft.VisualStudio.Component.VC.v141.ATL `
--add Microsoft.VisualStudio.Component.VC.v141.MFC `
--quiet --norestart --force
if ($LASTEXITCODE -notin @(0, 3010)) {
Write-Warning "vs_installer returned $LASTEXITCODE — components may already be installed, continuing."
}
run: python -m pip install --upgrade --break-system-packages aqtinstall

# - name: Install Windows SDK, v141 toolset and ATL
# shell: pwsh
# run: |
# $vsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
# $vsInstaller = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vs_installer.exe"
# $installPath = & $vsWhere -latest -products * -property installationPath
# & $vsInstaller modify `
# --installPath $installPath `
# --add Microsoft.VisualStudio.Component.Windows10SDK.19041 `
# --add Microsoft.VisualStudio.Component.VC.v141.x86.x64 `
# --add Microsoft.VisualStudio.Component.VC.v141.ATL `
# --add Microsoft.VisualStudio.Component.VC.v141.MFC `
# --quiet --norestart --force
# if ($LASTEXITCODE -notin @(0, 3010)) {
# Write-Warning "vs_installer returned $LASTEXITCODE — components may already be installed, continuing."
# }


- name: Set up sccache
Expand All @@ -257,30 +323,33 @@ jobs:
.\build\windows\build.ps1 `
-CommonDir "${{ github.workspace }}\common" `
-ProductVersion "${{ env.PRODUCT_VERSION }}" `
-Arch x64 `
-Arch ${{ matrix.arch == 'arm64' && 'arm64' || 'x64' }} `
-Target standalone `
-CompanyName Euro-Office `
-ProductName DesktopEditors

# ---- collect outputs (stays in the workflow) ---- #
- uses: actions/upload-artifact@v4
with:
name: windows-packages
name: windows-packages-${{ matrix.arch }}
path: |
desktop-apps/package/zip/*.zip
desktop-apps/package/inno/*.exe
desktop-apps/package/advinst/*.msi


build-linux:
runs-on: 'ubuntu-latest'
runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest' }}
needs: build-common
permissions:
contents: write
packages: write
strategy:
fail-fast: false
matrix:
arch:
- amd64
- arm64
brand:
- name: euro-office
extra_bake_files: ""
Expand All @@ -306,6 +375,16 @@ jobs:
path: build/brands/nextcloud-office-brand
token: ${{ secrets.EURO_OFFICE_MIRROR_TOKEN }}

- uses: actions/download-artifact@v4
with:
name: common-files
path: ./build/linux

- name: Extract common
run: |
mkdir -p ./build/linux/common
tar -xf ./build/linux/common.tar -C ./build/linux/common

- name: Debug workspace
run: |
echo "workspace: ${{ github.workspace }}"
Expand Down Expand Up @@ -381,12 +460,10 @@ jobs:
core-base.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-${{ matrix.brand.cache_prefix }}core-base-buildcache
core-base.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-${{ matrix.brand.cache_prefix }}core-base-buildcache,mode=max
core-base.tags=
third-party.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-${{ matrix.brand.cache_prefix }}third-party-buildcache
third-party.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-${{ matrix.brand.cache_prefix }}third-party-buildcache,mode=max
third-party.tags=
desktop-linux.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-${{ matrix.brand.cache_prefix }}desktop-linux-buildcache
desktop-linux.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-${{ matrix.brand.cache_prefix }}desktop-linux-buildcache,mode=max
desktop-linux.tags=
desktop-linux.contexts.desktop-common=./common
packages.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-${{ matrix.brand.cache_prefix }}packages-buildcache
packages.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-${{ matrix.brand.cache_prefix }}packages-buildcache,mode=max
packages.tags=
Expand All @@ -402,7 +479,7 @@ jobs:

- uses: actions/upload-artifact@v4
with:
name: linux-packages
name: linux-packages-${{ matrix.arch }}
path: |
build/linux/deploy/packages/*.deb
build/linux/deploy/packages/*.rpm
File renamed without changes.
16 changes: 3 additions & 13 deletions build/docker-bake.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ group "default" {
}

group "deps" {
targets = ["core-base", "desktop-js", "sdkjs-desktop", "web-apps"]
targets = ["desktop-js", "sdkjs-desktop", "web-apps"]
}

# ──────────────────────────────────────────────
Expand All @@ -91,16 +91,6 @@ target "_common" {
# DEPENDENCY TARGETS
# ──────────────────────────────────────────────

target "core-base" {
inherits = ["_common"]
context = ".."
dockerfile = "./core/.docker/core.bake.Dockerfile"
target = "core-base"
tags = ["${REGISTRY}/core-base:${TAG}"]
cache-from = ["type=local,src=./.docker-cache/${REGISTRY}/core-base"]
cache-to = ["type=local,dest=./.docker-cache/${REGISTRY}/core-base,mode=max"]
}

target "core-wasm" {
inherits = ["_common"]
context = ".."
Expand Down Expand Up @@ -152,15 +142,15 @@ target "desktop-common" {
context = ".."
dockerfile = "./build/.docker/desktop-composer.bake.Dockerfile"
target = "desktop-common" # points to the FROM scratch stage
tags = ["${REGISTRY}/desktop-common:${GIT_COMMIT}"]
tags = ["${REGISTRY}/desktop-common:${TAG}"]
contexts = {
desktop-js = "target:desktop-js" # even in stages before desktop-common
sdkjs-desktop = "target:sdkjs-desktop"
web-apps = "target:web-apps"
}

# Export the filesystem directly to a local directory instead of an image
output = ["type=docker"]
output = ["type=oci,dest=./deploy/common,tar=false"]

cache-from = ["type=local,src=/tmp/${REGISTRY}/desktop-common"] # reuses builder cache
}
7 changes: 4 additions & 3 deletions build/linux/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ NEXTCLOUD_USER=""
NEXTCLOUD_PASS=""
REGISTRY="ghcr.io/euro-office"
TAG="latest"
PRODUCT_VERSION=$(cat ../../VERSION)
PRODUCT_VERSION=$(cat ../../VERSION.txt)
BUILD_NUMBER="dev.0"
BRANDING_DIR="../"
COMPANY_NAME="Euro-Office"
Expand All @@ -15,5 +15,6 @@ GIT_COMMIT=$(git rev-parse --short HEAD)
export NEXTCLOUD_USER NEXTCLOUD_PASS REGISTRY TAG PRODUCT_VERSION \
BUILD_NUMBER BRANDING_DIR COMPANY_NAME PRODUCT_NAME GIT_COMMIT

(cd .. && docker buildx bake desktop-common)
docker buildx bake packages
docker buildx bake -f ../docker-bake.hcl -f docker-bake.hcl packages \
--set "desktop-linux.contexts.desktop-common=target:desktop-common" \
--set "*.context=../.."
5 changes: 4 additions & 1 deletion build/linux/docker-bake.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,9 @@ target "_common" {

target "core-base" {
inherits = ["_common"]
args = {
PRODUCT = "desktop"
}
context = "../.."
dockerfile = "./core/.docker/core.bake.Dockerfile"
target = "core-base"
Expand All @@ -110,7 +113,7 @@ target "desktop-linux" {
target = "desktop-linux"
tags = ["${REGISTRY}/desktop-linux:${TAG}"]
contexts = {
desktop-common = "docker-image://${REGISTRY}/desktop-common:${GIT_COMMIT}"
desktop-common = "oci-layout://../deploy/common:${TAG}"
core-base = "target:core-base"
}
secret = [
Expand Down
Loading
Loading