Add GitHub Actions CI builds for amd64 and aarch64 Linux server packages.

This commit is contained in:
Julian Groß 2022-11-26 17:42:02 +01:00
parent 0ccf95237a
commit 1ca69fde93
22 changed files with 426 additions and 116 deletions

289
.github/workflows/linux_server_build.yml vendored Normal file
View file

@ -0,0 +1,289 @@
# Copyright 2013-2019 High Fidelity, Inc.
# Copyright 2020-2022 Vircadia contributors.
# Copyright 2021-2022 Overte e.V.
# SPDX-License-Identifier: Apache-2.0
name: Linux Server CI Build
# Keep in mind that GitHub Actions does not allow reading secrets during PR builds.
on:
pull_request:
types: [opened, synchronize, reopened, labeled]
push:
branches:
- master
env:
BUILD_TYPE: Release
UPLOAD_BUCKET: overte-public
UPLOAD_REGION: fra1
UPLOAD_ENDPOINT: "https://fra1.digitaloceanspaces.com"
jobs:
build:
# Only run master or tagged builds, or PRs if labeled as "server"
if: contains( github.event.pull_request.labels.*.name, 'server') || github.event_name != 'pull_request'
name: "${{matrix.os}}, ${{matrix.arch}}"
strategy:
matrix:
include:
- os: debian-11
image: docker.io/overte/overte-server-build:0.1.2-debian-11-amd64
arch: amd64
runner: ubuntu-latest
- os: debian-11
image: docker.io/overte/overte-server-build:0.1.2-debian-11-aarch64
arch: aarch64
runner: linux_aarch64
- os: ubuntu-18.04
image: docker.io/overte/overte-server-build:0.1.1-ubuntu-18.04-amd64
arch: amd64
runner: ubuntu-latest
- os: ubuntu-20.04
image: docker.io/overte/overte-server-build:0.1.1-ubuntu-20.04-amd64
arch: amd64
runner: ubuntu-latest
- os: ubuntu-22.04
image: docker.io/overte/overte-server-build:0.1.1-ubuntu-22.04-amd64
arch: amd64
runner: ubuntu-latest
- os: ubuntu-22.04
image: docker.io/overte/overte-server-build:0.1.1-ubuntu-22.04-aarch64
arch: aarch64
runner: linux_aarch64
- os: fedora-36
image: docker.io/overte/overte-server-build:0.1.2-fedora-36-amd64
arch: amd64
runner: ubuntu-latest
- os: fedora-36
image: docker.io/overte/overte-server-build:0.1.2-fedora-36-aarch64
arch: aarch64
runner: linux_aarch64
- os: fedora-37
image: docker.io/overte/overte-server-build:0.1.2-fedora-37-amd64
arch: amd64
runner: ubuntu-latest
- os: fedora-37
image: docker.io/overte/overte-server-build:0.1.2-fedora-37-aarch64
arch: aarch64
runner: linux_aarch64
- os: rockylinux-9
image: docker.io/overte/overte-server-build:0.1.2-rockylinux-9-amd64
arch: amd64
runner: ubuntu-latest
fail-fast: false
runs-on: ${{matrix.runner}}
container: ${{matrix.image}}
steps:
- name: Configure Build Environment 1
shell: bash
run: |
# Get git commit
if [ "${{github.event_name}}" = "pull_request" ]; then
echo "GIT_COMMIT_SHORT=`echo ${{ github.event.pull_request.head.sha }} | cut -c1-7`" >> $GITHUB_ENV
else # master or tagged
echo "GIT_COMMIT_SHORT=`echo ${{ github.sha }} | cut -c1-7`" >> $GITHUB_ENV
fi
echo "JOB_NAME=${{matrix.os}}, ${{matrix.arch}}" >> $GITHUB_ENV
echo "CMAKE_BUILD_EXTRA=-- -j$(nproc)" >> $GITHUB_ENV
if [[ "${{ matrix.os }}" =~ "ubuntu" || "${{ matrix.os }}" =~ "debian" ]]; then
echo "INSTALLER_EXT=deb" >> $GITHUB_ENV
echo "DEBEMAIL=julian.gro@overte.org" >> $GITHUB_ENV
echo "DEBFULLNAME=GitHub Actions CI" >> $GITHUB_ENV
else # RPM
if [ "${{ matrix.arch }}" == "amd64" ]; then
echo "INSTALLER_EXT=x86_64.rpm" >> $GITHUB_ENV
else
echo "INSTALLER_EXT=aarch64.rpm" >> $GITHUB_ENV
fi
fi
# Tagged builds. E.g. release or release candidate builds.
if [ "${{github.event_name}}" != "pull_request" ]; then
echo "PRODUCTION_BUILD=true" >> $GITHUB_ENV
fi
# Systems requiring our prebuilt Qt package
if [[ "${{ matrix.os }}" = "ubuntu-18.04" || "${{ matrix.os }}" = "ubuntu-20.04" ]]; then
echo # false
else
echo "OVERTE_USE_SYSTEM_QT=true" >> $GITHUB_ENV
fi
# Architecture specific variables
if [[ "${{ matrix.arch }}" = "aarch64" ]]; then
echo "VCPKG_FORCE_SYSTEM_BINARIES=true" >> $GITHUB_ENV
echo "CMAKE_EXTRA=-DOVERTE_CPU_ARCHITECTURE= -DSERVER_ONLY=true -DBUILD_TOOLS=true" >> $GITHUB_ENV
else # amd64
echo "CMAKE_EXTRA=-DOVERTE_CPU_ARCHITECTURE=-msse3 -DSERVER_ONLY=true -DBUILD_TOOLS=true" >> $GITHUB_ENV
fi
# Configuration is broken into multiple steps because you can't set an env var and also reference it in the same step
- name: Configure Build Environment 2
shell: bash
run: |
# Versioning
if [ "${{ github.event_name }}" = "pull_request" ]; then
echo "DEBVERSION=${{ github.event.number }}PR-$GIT_COMMIT_SHORT-${{ matrix.os }}" >> $GITHUB_ENV
echo "RPMVERSION=PR${{ github.event.number }}.$GIT_COMMIT_SHORT" >> $GITHUB_ENV
elif [ "${{ github.ref_name }}" = "master" ]; then
echo "DEBVERSION=${{ github.run_number }}master-$GIT_COMMIT_SHORT-${{ matrix.os }}" >> $GITHUB_ENV
echo "RPMVERSION=master${{ github.run_number }}.$GIT_COMMIT_SHORT" >> $GITHUB_ENV
echo "UPLOAD_PREFIX=build/overte/master" >> $GITHUB_ENV
echo "RELEASE_NUMBER=${{ github.run_number }}" >> $GITHUB_ENV
else # tagged
echo "DEBVERSION=${{ github.run_number }}-${{ github.ref_name }}-$GIT_COMMIT_SHORT-${{ matrix.os }}" >> $GITHUB_ENV
echo "RPMVERSION=${${{ github.ref_name }}//-/.}.${{ github.run_number }}.$GIT_COMMIT_SHORT" >> $GITHUB_ENV
fi
if [[ "${{ github.ref_name }}" != "master" && "${{ github.ref_name }}" != "pull_request" ]]; then # tagged
echo "RELEASE_NUMBER=/${{ github.ref_name }}" >> $GITHUB_ENV
if [ "${{ github.ref_name }}" == *"rc"* ]; then # release candidate
echo "UPLOAD_PREFIX=build/overte/release-candidate" >> $GITHUB_ENV
else # release
echo "UPLOAD_PREFIX=build/overte/release" >> $GITHUB_ENV
fi
fi
- name: Configure Build Environment 3
shell: bash
run: |
if [[ "${{ matrix.os }}" =~ "ubuntu" || "${{ matrix.os }}" =~ "debian" ]]; then
if [ "${{ matrix.arch }}" == "aarch64" ]; then
echo "ARTIFACT_PATTERN=overte-server_${DEBVERSION}-1_arm64.$INSTALLER_EXT" >> $GITHUB_ENV
else # amd64
echo "ARTIFACT_PATTERN=overte-server_${DEBVERSION}-1_amd64.$INSTALLER_EXT" >> $GITHUB_ENV
fi
else # RPM
if [ "${{ matrix.os }}" == "rockylinux-9" ]; then
echo "ARTIFACT_PATTERN=overte-server-$RPMVERSION-1.el9.$INSTALLER_EXT" >> $GITHUB_ENV
elif [ "${{ matrix.os }}" == "fedora-36" ]; then
echo "ARTIFACT_PATTERN=overte-server-$RPMVERSION-1.fc36.$INSTALLER_EXT" >> $GITHUB_ENV
elif [ "${{ matrix.os }}" == "fedora-37" ]; then
echo "ARTIFACT_PATTERN=overte-server-$RPMVERSION-1.fc37.$INSTALLER_EXT" >> $GITHUB_ENV
else
echo "Error! ARTIFACT_PATTERN not set!"
exit 1 # Fail
fi
fi
# Checkout v2 and v3 are currently broken on our Docker configuration
- uses: actions/checkout@v1
with:
submodules: false
fetch-depth: 1
- name: Create Build Environment
shell: bash
run: mkdir build
- name: Configure CMake
working-directory: build
shell: bash
run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DVCPKG_BUILD_TYPE=release $CMAKE_EXTRA
- name: Compress cmake logs
if: always()
shell: bash
run: |
if [ ${{ env.CI_WORKSPACE }} ]; then
find "$CI_WORKSPACE/overte-files/vcpkg" -name '*log' -type f -print0 | tar --null --force-local -T - -c --xz -v -f "cmake-logs-${{ matrix.os }}-${{ matrix.arch }}-${{ github.event.number }}.tar.xz"
else
find "$HOME/overte-files/vcpkg" -name '*log' -type f -print0 | tar --null --force-local -T - -c --xz -v -f "cmake-logs-${{ matrix.os }}-${{ matrix.arch }}-${{ github.event.number }}.tar.xz"
fi
- name: Archive cmake logs
if: always()
# upload-artifact v2 and v3 are currently broken on our Docker configuration
uses: actions/upload-artifact@v1
with:
name: cmake-logs-${{ matrix.os }}-${{ matrix.arch }}-${{ github.event.number }}.tar.xz
path: cmake-logs-${{ matrix.os }}-${{ matrix.arch }}-${{ github.event.number }}.tar.xz
- name: Build Domain Server
working-directory: build
shell: bash
run: cmake --build . --config $BUILD_TYPE --target domain-server $CMAKE_BUILD_EXTRA
- name: Build Assignment Client
working-directory: build
shell: bash
run: cmake --build . --config $BUILD_TYPE --target assignment-client $CMAKE_BUILD_EXTRA
- name: Build Oven
working-directory: build
shell: bash
run: cmake --build . --config $BUILD_TYPE --target oven $CMAKE_BUILD_EXTRA
- name: Package
working-directory: pkg-scripts
shell: bash
run: |
if [[ "${{ matrix.os }}" = "ubuntu"* || "${{ matrix.os }}" = "debian"* ]]; then # Debian
./make-deb-server
else # RPM
./make-rpm-server
fi
- name: Output system stats
if: ${{ always() }}
shell: bash
run: |
echo "Disk usage:"
df -h
- name: tree
if: always()
shell: bash
run: |
if [[ "${{ matrix.os }}" =~ "ubuntu" || "${{ matrix.os }}" =~ "debian" ]]; then
echo "Updating apt repository index"
sudo apt update || exit 1
echo "Installing apt packages"
sudo apt -y install tree || exit 1
else # RPM
dnf -y install tree || exit 1
fi
tree -f /
- name: Upload artifact to GitHub
if: github.event_name == 'pull_request'
# upload-artifact v2 and v3 are currently broken on our Docker configuration
uses: actions/upload-artifact@v1
with:
name: ${{ env.ARTIFACT_PATTERN }}
path: pkg-scripts/${{ env.ARTIFACT_PATTERN }}
- name: Upload artifact to S3
if: github.event_name != 'pull_request' # PR builds cannot be uploaded to S3
shell: bash
working-directory: pkg-scripts
env:
AWS_ACCESS_KEY_ID: ${{ secrets.s3_access_key_id }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.s3_secret_access_key }}
run: python3 $GITHUB_WORKSPACE/tools/ci-scripts/upload.py

View file

@ -14,7 +14,7 @@ env:
APP_NAME: interface APP_NAME: interface
BUILD_TYPE: Release BUILD_TYPE: Release
CI_BUILD: Github CI_BUILD: Github
GIT_COMMIT: ${{ github.sha }} GIT_COMMIT: ${{ github.event.pull_request.head.sha }}
# VCPKG did not build well on OSX disabling HIFI_VCPKG_BOOTSTRAP, which invokes a download to a working version of vcpkg # VCPKG did not build well on OSX disabling HIFI_VCPKG_BOOTSTRAP, which invokes a download to a working version of vcpkg
# HIFI_VCPKG_BOOTSTRAP: true # HIFI_VCPKG_BOOTSTRAP: true
RELEASE_TYPE: PR RELEASE_TYPE: PR
@ -69,7 +69,8 @@ jobs:
id: buildenv1 id: buildenv1
run: | run: |
echo "{github_sha_short}={`echo $GIT_COMMIT | cut -c1-7`}" >> $GITHUB_OUTPUT # Setting short commit SHA for use as RELEASE_NAME in generated installers.
echo "GIT_COMMIT_SHORT=`echo $GIT_COMMIT | cut -c1-7`" >> $GITHUB_ENV
echo "JOB_NAME=${{matrix.os}}, ${{matrix.build_type}}" >> $GITHUB_ENV echo "JOB_NAME=${{matrix.os}}, ${{matrix.build_type}}" >> $GITHUB_ENV
echo "APP_TARGET_NAME=$APP_NAME" >> $GITHUB_ENV echo "APP_TARGET_NAME=$APP_NAME" >> $GITHUB_ENV
@ -78,12 +79,12 @@ jobs:
echo "PYTHON_EXEC=python3" >> $GITHUB_ENV echo "PYTHON_EXEC=python3" >> $GITHUB_ENV
echo "INSTALLER_EXT=*" >> $GITHUB_ENV echo "INSTALLER_EXT=*" >> $GITHUB_ENV
echo "CMAKE_BUILD_EXTRA=-- -j$(nproc)" >> $GITHUB_ENV echo "CMAKE_BUILD_EXTRA=-- -j$(nproc)" >> $GITHUB_ENV
# Don't optimize builds to save build time.
echo "OVERTE_OPTIMIZE=false" >> $GITHUB_ENV
# Variables specific to our aarch64 runner # Variables specific to our aarch64 runner
if [ "${{ matrix.os }}" = "self-hosted_debian-11_aarch64" ]; then if [ "${{ matrix.os }}" = "self-hosted_debian-11_aarch64" ]; then
echo "OVERTE_USE_SYSTEM_QT=true" >> $GITHUB_ENV echo "OVERTE_USE_SYSTEM_QT=true" >> $GITHUB_ENV
echo "CI_WORKSPACE=${{runner.workspace}}" >> $GITHUB_ENV echo "CI_WORKSPACE=${{runner.workspace}}" >> $GITHUB_ENV
# Don't optimize builds to save build time.
echo "OVERTE_OPTIMIZE=false" >> $GITHUB_ENV
fi fi
if [[ "${{ matrix.os }}" = *"aarch64" ]]; then if [[ "${{ matrix.os }}" = *"aarch64" ]]; then
@ -140,14 +141,12 @@ jobs:
run: | run: |
echo "${{ steps.buildenv1.outputs.symbols_archive }}" echo "${{ steps.buildenv1.outputs.symbols_archive }}"
# Setting short commit SHA for use as RELEASE_NAME in generated installers.
echo "GIT_COMMIT_SHORT=${{ steps.buildenv1.outputs.github_sha_short }}" >> $GITHUB_ENV
if [ "${{ matrix.build_type }}" = "full" ]; then if [ "${{ matrix.build_type }}" = "full" ]; then
echo "ARTIFACT_PATTERN=Overte-PR${{ github.event.number }}-${{ steps.buildenv1.outputs.github_sha_short }}.$INSTALLER_EXT" >> $GITHUB_ENV echo "ARTIFACT_PATTERN=Overte-PR${{ github.event.number }}-${GIT_COMMIT_SHORT}.$INSTALLER_EXT" >> $GITHUB_ENV
echo "INSTALLER=Overte-$RELEASE_NUMBER-${{ steps.buildenv1.outputs.github_sha_short }}.$INSTALLER_EXT" >> $GITHUB_ENV echo "INSTALLER=Overte-$RELEASE_NUMBER-${GIT_COMMIT_SHORT}.$INSTALLER_EXT" >> $GITHUB_ENV
else else
echo "ARTIFACT_PATTERN=Overte-Interface-PR${{ github.event.number }}-${{ steps.buildenv1.outputs.github_sha_short }}.$INSTALLER_EXT" >> $GITHUB_ENV echo "ARTIFACT_PATTERN=Overte-Interface-PR${{ github.event.number }}-${GIT_COMMIT_SHORT}.$INSTALLER_EXT" >> $GITHUB_ENV
echo "INSTALLER=Overte-Interface-$RELEASE_NUMBER-${{ steps.buildenv1.outputs.github_sha_short }}.$INSTALLER_EXT" >> $GITHUB_ENV echo "INSTALLER=Overte-Interface-$RELEASE_NUMBER-${GIT_COMMIT_SHORT}.$INSTALLER_EXT" >> $GITHUB_ENV
fi fi
- name: Clear Working Directory - name: Clear Working Directory

View file

@ -1,3 +1,8 @@
# Copyright 2013-2019 High Fidelity, Inc.
# Copyright 2019-2021 Vircadia contributors.
# Copyright 2020-2022 Overte e.V.
# SPDX-License-Identifier: Apache-2.0
# If we're running under the gradle build, HIFI_ANDROID will be set here, but # If we're running under the gradle build, HIFI_ANDROID will be set here, but
# ANDROID will not be set until after the `project` statement. This is the *ONLY* # ANDROID will not be set until after the `project` statement. This is the *ONLY*
# place you need to use `HIFI_ANDROID` instead of `ANDROID` # place you need to use `HIFI_ANDROID` instead of `ANDROID`

View file

@ -136,7 +136,7 @@ For code signing to work, you will need to set the `HF_PFX_FILE` and `HF_PFX_PAS
1. Build Docker image as instructed in the relevant Dockerfile in [tools/ci-scripts/deb_package/](tools/ci-scripts/deb_package/) 1. Build Docker image as instructed in the relevant Dockerfile in [tools/ci-scripts/deb_package/](tools/ci-scripts/deb_package/)
2. Create/Start container 2. Create/Start container
Example: `docker run -v $(pwd)/../../..:/overte -it juliangro/overte-server-build:0.1.1-debian-11` Example: `docker run -v $(pwd)/../../..:/overte -it overte/overte-server-build:0.1.2-debian-11-amd64`
3. Prepare build environment 3. Prepare build environment
```bash ```bash
@ -175,7 +175,7 @@ DEBVERSION="1-experimental-ubuntu-18.04" DEBEMAIL="julian.gro@overte.org" DEBFUL
1. Build Docker image as instructed in the relevant Dockerfile in [tools/ci-scripts/rpm_package/](tools/ci-scripts/rpm_package/) 1. Build Docker image as instructed in the relevant Dockerfile in [tools/ci-scripts/rpm_package/](tools/ci-scripts/rpm_package/)
2. Create/Start container 2. Create/Start container
Example: `docker run -v $(pwd)/../../..:/overte -it juliangro/overte-server-build:0.1.1-fedora-36` Example: `docker run -v $(pwd)/../../..:/overte -it overte/overte-server-build:0.1.2-fedora-36-amd64`
3. Prepare build environment 3. Prepare build environment
```bash ```bash

View file

@ -1,3 +1,8 @@
# Copyright 2013-2019 High Fidelity, Inc.
# Copyright 2020-2022 Vircadia contributors.
# Copyright 2020-2022 Overte e.V.
# SPDX-License-Identifier: Apache-2.0
import hifi_utils import hifi_utils
import hifi_android import hifi_android
import hashlib import hashlib
@ -62,7 +67,7 @@ endif()
system_qt = False system_qt = False
# Here we handle the 3 possible cases of dealing with Qt: # Here we handle the 3 possible cases of dealing with Qt:
if os.getenv('OVERTE_USE_SYSTEM_QT', "") != "": if bool(os.getenv('OVERTE_USE_SYSTEM_QT', False)):
# 1. Using the system provided Qt. This is only recommended for Qt 5.15.0 and above, # 1. Using the system provided Qt. This is only recommended for Qt 5.15.0 and above,
# as it includes a required fix on Linux. # as it includes a required fix on Linux.
# #

View file

@ -1,3 +1,9 @@
<!--
Copyright 2021 Vircadia contributors.
Copyright 2022 Overte e.V.
SPDX-License-Identifier: Apache-2.0
-->
# Overte Server Packaging Scripts # Overte Server Packaging Scripts
Collection of scripts to create server distribution packages. Most of these scripts assume Collection of scripts to create server distribution packages. Most of these scripts assume

View file

@ -1,14 +1,22 @@
#!/bin/sh #!/bin/sh
# Copyright 2020-2021 Vircadia contributors.
# Copyright 2022 Overte e.V.
# SPDX-License-Identifier: Apache-2.0
if [ "$OVERTE" = "" ]; then if [ "$OVERTE" = "" ]; then
OVERTE=`realpath ..` OVERTE=`realpath ..`
QT5_LIBS=`realpath ~/overte-files/qt/qt5-install/lib` if [ ! "$OVERTE_USE_SYSTEM_QT" ]; then
QT5_LIBS=`realpath ~/overte-files/qt/qt5-install/lib`
fi
fi fi
sudo apt-get install chrpath binutils dh-make sudo apt-get install chrpath binutils dh-make
DEB_BUILD_ROOT=temp-make-deb/overte-server_$DEBVERSION DEB_BUILD_ROOT=temp-make-deb/overte-server_$DEBVERSION
rm -r temp-make-deb if [ -d temp-make-deb ]; then
rm -r temp-make-deb
fi
mkdir -p $DEB_BUILD_ROOT mkdir -p $DEB_BUILD_ROOT
# copy the files over # copy the files over
@ -18,7 +26,7 @@ cp $OVERTE/build/tools/oven/oven $DEB_BUILD_ROOT # Oven is required for pre-bak
cp $OVERTE/build/libraries/*/*.so $DEB_BUILD_ROOT cp $OVERTE/build/libraries/*/*.so $DEB_BUILD_ROOT
#cp $OVERTE/build/ice-server/ice-server $DEB_BUILD_ROOT #cp $OVERTE/build/ice-server/ice-server $DEB_BUILD_ROOT
chrpath -d $DEB_BUILD_ROOT/* chrpath -d $DEB_BUILD_ROOT/*
if [ "$OVERTE_USE_SYSTEM_QT" = "" ]; then if [ ! "$OVERTE_USE_SYSTEM_QT" ]; then
cp $QT5_LIBS/libQt5Network.so.*.*.* $DEB_BUILD_ROOT cp $QT5_LIBS/libQt5Network.so.*.*.* $DEB_BUILD_ROOT
cp $QT5_LIBS/libQt5Core.so.*.*.* $DEB_BUILD_ROOT cp $QT5_LIBS/libQt5Core.so.*.*.* $DEB_BUILD_ROOT
cp $QT5_LIBS/libQt5Widgets.so.*.*.* $DEB_BUILD_ROOT cp $QT5_LIBS/libQt5Widgets.so.*.*.* $DEB_BUILD_ROOT
@ -69,7 +77,7 @@ echo domain-server opt/overte >> debian/install
echo oven opt/overte >> debian/install echo oven opt/overte >> debian/install
#echo ice-server opt/overte >> debian/install #echo ice-server opt/overte >> debian/install
echo new-server opt/overte >> debian/install echo new-server opt/overte >> debian/install
if [ "$OVERTE_USE_SYSTEM_QT" = "" ]; then if [ ! "$OVERTE_USE_SYSTEM_QT" ]; then
for so in *.so.*.*.*; do for so in *.so.*.*.*; do
echo $so opt/overte/lib >> debian/install echo $so opt/overte/lib >> debian/install
done done
@ -86,7 +94,7 @@ done
find resources -type f -exec sh -c 'echo {} opt/overte/$(dirname "{}") >> debian/install' \; find resources -type f -exec sh -c 'echo {} opt/overte/$(dirname "{}") >> debian/install' \;
find plugins -type f -exec sh -c 'echo {} opt/overte/$(dirname "{}") >> debian/install' \; find plugins -type f -exec sh -c 'echo {} opt/overte/$(dirname "{}") >> debian/install' \;
if [ "$OVERTE_USE_SYSTEM_QT" = "" ]; then if [ ! "$OVERTE_USE_SYSTEM_QT" ]; then
SOFILES=`ls *.so *.so.*.*.* | grep -Po '^(.+\.so(\.\d+)?)' | sed 's/\./\\\./g' | paste -d'|' -s` SOFILES=`ls *.so *.so.*.*.* | grep -Po '^(.+\.so(\.\d+)?)' | sed 's/\./\\\./g' | paste -d'|' -s`
else else
SOFILES=`ls *.so | grep -Po '^(.+\.so(\.\d+)?)' | sed 's/\./\\\./g' | paste -d'|' -s` SOFILES=`ls *.so | grep -Po '^(.+\.so(\.\d+)?)' | sed 's/\./\\\./g' | paste -d'|' -s`
@ -101,3 +109,4 @@ sed "s/{DEPENDS}/$DEPENDS/" $OVERTE/pkg-scripts/server-control > debian/control
dpkg-buildpackage -us -uc dpkg-buildpackage -us -uc
mv $OVERTE/pkg-scripts/temp-make-deb/*.deb $OVERTE/pkg-scripts/ # move package out of temp-make-deb

View file

@ -1,5 +1,9 @@
#!/bin/sh #!/bin/sh
# Copyright 2020-2021 Vircadia contributors.
# Copyright 2022 Overte e.V.
# SPDX-License-Identifier: Apache-2.0
if [ "$OVERTE" = "" ]; then if [ "$OVERTE" = "" ]; then
OVERTE=`realpath ..` OVERTE=`realpath ..`
QT5_LIBS=`realpath ~/overte-files/qt/qt5-install/lib` QT5_LIBS=`realpath ~/overte-files/qt/qt5-install/lib`
@ -76,5 +80,5 @@ fi
sudo yum install chrpath sudo yum install chrpath
export VERSION DEPENDS OVERTE export VERSION DEPENDS OVERTE
rpmbuild --target x86_64 -bb ./overte-server.spec rpmbuild --target $(uname -m) -bb ./overte-server.spec
mv ~/rpmbuild/RPMS/x86_64/*.rpm . mv ~/rpmbuild/RPMS/$(uname -m)/*.rpm .

View file

@ -1,3 +1,7 @@
# Copyright 2020-2021 Vircadia contributors.
# Copyright 2022 Overte e.V.
# SPDX-License-Identifier: Apache-2.0
#OVERTE=~/Overte rpmbuild --target x86_64 -bb overte-server.spec #OVERTE=~/Overte rpmbuild --target x86_64 -bb overte-server.spec
%define version %{lua:print(os.getenv("VERSION"))} %define version %{lua:print(os.getenv("VERSION"))}
%define depends %{lua:print(os.getenv("DEPENDS"))} %define depends %{lua:print(os.getenv("DEPENDS"))}
@ -14,7 +18,10 @@ Source0: https://github.com/overte-org/overte
#BuildRequires: systemd-rpm-macros #BuildRequires: systemd-rpm-macros
BuildRequires: chrpath BuildRequires: chrpath
Requires: %{depends} Requires: %{depends}
BuildArch: x86_64
BuildArch: %_target_cpu
AutoReq: no AutoReq: no
AutoProv: no AutoProv: no

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: 2022 Overte e.V.
SPDX-License-Identifier: MIT

View file

@ -1,3 +1,7 @@
# Copyright 2020-2021 Vircadia contributors.
# Copyright 2022 Overte e.V.
# SPDX-License-Identifier: Apache-2.0
Source: overte-server Source: overte-server
Section: comm Section: comm
Priority: optional Priority: optional

View file

@ -1,4 +1,9 @@
#!/usr/bin/make -f #!/usr/bin/make -f
# Copyright 2020-2021 Vircadia contributors.
# Copyright 2022 Overte e.V.
# SPDX-License-Identifier: Apache-2.0
# See debhelper(7) (uncomment to enable) # See debhelper(7) (uncomment to enable)
# output every command that modifies files on the build system. # output every command that modifies files on the build system.
#export DH_VERBOSE = 1 #export DH_VERBOSE = 1

View file

@ -1,5 +1,8 @@
# Copyright 2022 Overte e.V.
# SPDX-License-Identifier: MIT
# Docker file for building Overte Server # Docker file for building Overte Server
# Example build: docker build -t juliangro/overte-server-build:0.1.1-debian-11 -f Dockerfile_build_debian-11 . # Example build: docker build -t overte/overte-server-build:0.1.2-debian-11 -f Dockerfile_build_debian-11 .
FROM debian:bullseye FROM debian:bullseye
LABEL maintainer="Julian Groß (julian.gro@overte.org)" LABEL maintainer="Julian Groß (julian.gro@overte.org)"
LABEL description="Development image for Overte Domain server and assignment clients." LABEL description="Development image for Overte Domain server and assignment clients."
@ -12,7 +15,12 @@ RUN echo UTC >/etc/timezone
RUN apt-get update && apt-get -y install tzdata RUN apt-get update && apt-get -y install tzdata
# Install Overte domain-server and assignment-client build dependencies # Install Overte domain-server and assignment-client build dependencies
RUN apt-get -y install curl ninja-build git cmake g++ libssl-dev libqt5websockets5-dev qtscript5-dev qtdeclarative5-dev qtmultimedia5-dev python3-distutils python3-distro mesa-common-dev libgl1-mesa-dev RUN apt-get -y install curl ninja-build git g++ libssl-dev libqt5websockets5-dev qtscript5-dev qtdeclarative5-dev qtmultimedia5-dev python3-distutils python3-distro mesa-common-dev libgl1-mesa-dev
# Install CMake from Debian Backports
RUN echo deb http://deb.debian.org/debian bullseye-backports main > /etc/apt/sources.list.d/bullseye-backports.list
RUN apt-get update && apt-get -y -t bullseye-backports install -y cmake
# Install Overte tools build dependencies # Install Overte tools build dependencies
RUN apt-get -y install libqt5webchannel5-dev qtwebengine5-dev libqt5xmlpatterns5-dev RUN apt-get -y install libqt5webchannel5-dev qtwebengine5-dev libqt5xmlpatterns5-dev
@ -31,8 +39,5 @@ RUN echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc
RUN echo "export LANG=en_US.UTF-8" >> ~/.bashrc RUN echo "export LANG=en_US.UTF-8" >> ~/.bashrc
RUN echo "export LANGUAGE=en_US.UTF-8" >> ~/.bashrc RUN echo "export LANGUAGE=en_US.UTF-8" >> ~/.bashrc
# Install tools for creating the server image
RUN apt-get -y install docker.io xz-utils
# Install tools needed for our Github Actions Workflow # Install tools needed for our Github Actions Workflow
Run apt-get -y install python3-boto3 python3-github zip Run apt-get -y install python3-boto3 python3-github zip

View file

@ -1,5 +1,8 @@
# Copyright 2022 Overte e.V.
# SPDX-License-Identifier: MIT
# Docker file for building Overte Server # Docker file for building Overte Server
# Example build: docker build -t juliangro/overte-server-build:0.1.1-ubuntu-18.04 -f Dockerfile_build_ubuntu-18.04 . # Example build: docker build -t overte/overte-server-build:0.1.1-ubuntu-18.04 -f Dockerfile_build_ubuntu-18.04 .
FROM ubuntu:18.04 FROM ubuntu:18.04
LABEL maintainer="Julian Groß (julian.gro@overte.org)" LABEL maintainer="Julian Groß (julian.gro@overte.org)"
LABEL description="Development image for Overte Domain server and assignment clients." LABEL description="Development image for Overte Domain server and assignment clients."

View file

@ -1,5 +1,8 @@
# Copyright 2022 Overte e.V.
# SPDX-License-Identifier: MIT
# Docker file for building Overte Server # Docker file for building Overte Server
# Example build: docker build -t juliangro/overte-server-build:0.1.1-ubuntu-20.04 -f Dockerfile_build_ubuntu-20.04 . # Example build: docker build -t overte/overte-server-build:0.1.1-ubuntu-20.04 -f Dockerfile_build_ubuntu-20.04 .
FROM ubuntu:20.04 FROM ubuntu:20.04
LABEL maintainer="Julian Groß (julian.gro@overte.org)" LABEL maintainer="Julian Groß (julian.gro@overte.org)"
LABEL description="Development image for Overte Domain server and assignment clients." LABEL description="Development image for Overte Domain server and assignment clients."

View file

@ -1,5 +1,8 @@
# Copyright 2022 Overte e.V.
# SPDX-License-Identifier: MIT
# Docker file for building Overte Server # Docker file for building Overte Server
# Example build: docker build -t juliangro/overte-server-build:0.1.1-ubuntu-22.04 -f Dockerfile_build_ubuntu-22.04 . # Example build: docker build -t overte/overte-server-build:0.1.1-ubuntu-22.04 -f Dockerfile_build_ubuntu-22.04 .
FROM ubuntu:22.04 FROM ubuntu:22.04
LABEL maintainer="Julian Groß (julian.gro@overte.org)" LABEL maintainer="Julian Groß (julian.gro@overte.org)"
LABEL description="Development image for Overte Domain server and assignment clients." LABEL description="Development image for Overte Domain server and assignment clients."
@ -31,8 +34,5 @@ RUN echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc
RUN echo "export LANG=en_US.UTF-8" >> ~/.bashrc RUN echo "export LANG=en_US.UTF-8" >> ~/.bashrc
RUN echo "export LANGUAGE=en_US.UTF-8" >> ~/.bashrc RUN echo "export LANGUAGE=en_US.UTF-8" >> ~/.bashrc
# Install tools for creating the server image
RUN apt-get -y install docker.io xz-utils
# Install tools needed for our Github Actions Workflow # Install tools needed for our Github Actions Workflow
Run apt-get -y install python3-boto3 python3-github zip Run apt-get -y install python3-boto3 python3-github zip

View file

@ -1,21 +1,26 @@
<!--
Copyright 2022 Overte e.V.
SPDX-License-Identifier: MIT
-->
This directory contains scripts used for building Linux server Docker images. This directory contains scripts used for building Linux server Docker images.
We are building Debian 11 based images for x86_64 and aarch64. We are building Debian 11 based images for x86_64 and aarch64.
To build images for both architectures, you first create them with separate tags (e.g. 0.1-aarch64 and 0.1-amd64), push them, To build images for both architectures, you first create them with separate tags (e.g. 0.1-aarch64 and 0.1-amd64), push them,
and then you use *docker manifest* to link them together. E.g.: and then you use *docker manifest* to link them together. E.g.:
```bash ```bash
docker manifest create overte-org/overte-server-build:0.1 --amend overte-org/overte-server-build:0.1-amd64 --amend overte-org/overte-server-build:0.1-aarch64 docker manifest create overte/overte-server-build:0.1 --amend overte/overte-server-build:0.1-amd64 --amend overte/overte-server-build:0.1-aarch64
``` ```
Then you push the manifest similar to how you would push an image: Then you push the manifest similar to how you would push an image:
```bash ```bash
docker manifest push overte-org/overte-server-build:0.1 docker manifest push overte/overte-server-build:0.1
``` ```
*Dockerfile_build* generates an image that is used to build our Overte Docker Server images. It includes all dependencies for building a server. *Dockerfile_build* generates an image that is used to build our Overte Docker Server images. It includes all dependencies for building a server.
Current images are available at https://hub.docker.com/repository/docker/juliangro/overte-server-build Current images are available at https://hub.docker.com/repository/docker/overte/overte-server-build
*Dockerfile_runtime_linuxbase* generates a runtime base image for our Server. It includes all dependencies for running a server. *Dockerfile_runtime_linuxbase* generates a runtime base image for our Server. It includes all dependencies for running a server.
Current images are available at https://hub.docker.com/repository/docker/juliangro/overte-server-base Current images are available at https://hub.docker.com/repository/docker/overte/overte-server-base
*Dockerfile_runtime* installs the built server into an image that uses the overte-server-base as a base. *Dockerfile_runtime* installs the built server into an image that uses the overte-server-base as a base.
The resulting image can be pushed to a Docker repository, or exported, compressed, and published via other means like the https://public.overte.org/index.html The resulting image can be pushed to a Docker repository, or exported, compressed, and published via other means like the https://public.overte.org/index.html

View file

@ -1,5 +1,8 @@
# Copyright 2022 Overte e.V.
# SPDX-License-Identifier: MIT
# Docker file for building Overte Server # Docker file for building Overte Server
# Example build: docker build -t juliangro/overte-server-build:0.1.1-fedora-36 -f Dockerfile_build_fedora-36 . # Example build: docker build -t overte/overte-server-build:0.1.2-fedora-36 -f Dockerfile_build_fedora-36 .
FROM fedora:36 FROM fedora:36
LABEL maintainer="Julian Groß (julian.gro@overte.org)" LABEL maintainer="Julian Groß (julian.gro@overte.org)"
LABEL description="Development image for Overte Domain server and assignment clients." LABEL description="Development image for Overte Domain server and assignment clients."
@ -12,3 +15,6 @@ RUN dnf -y install zip unzip
# Install tools for package creation # Install tools for package creation
RUN dnf -y install chrpath rpmdevtools RUN dnf -y install chrpath rpmdevtools
# Install tools needed for our Github Actions Workflow
Run dnf -y install python3-boto3 python3-pygithub

View file

@ -0,0 +1,20 @@
# Copyright 2022 Overte e.V.
# SPDX-License-Identifier: MIT
# Docker file for building Overte Server
# Example build: docker build -t overte/overte-server-build:0.1.2-fedora-37 -f Dockerfile_build_fedora-37 .
FROM fedora:37
LABEL maintainer="Julian Groß (julian.gro@overte.org)"
LABEL description="Development image for Overte Domain server and assignment clients."
# Install Overte domain-server and assignment-client build dependencies
RUN dnf -y install curl ninja-build git cmake gcc-c++ openssl-devel qt5-qtwebsockets-devel qt5-qtscript-devel qt5-qtmultimedia-devel unzip libXext-devel qt5-qtwebchannel-devel qt5-qtwebengine-devel qt5-qtxmlpatterns-devel
# Install additional build tools
RUN dnf -y install zip unzip
# Install tools for package creation
RUN dnf -y install chrpath rpmdevtools
# Install tools needed for our Github Actions Workflow
Run dnf -y install python3-boto3 python3-pygithub

View file

@ -1,5 +1,8 @@
# Copyright 2022 Overte e.V.
# SPDX-License-Identifier: MIT
# Docker file for building Overte Server # Docker file for building Overte Server
# Example build: docker build -t juliangro/overte-server-build:0.1.1-rockylinux-9 -f Dockerfile_build_rockylinux-9 . # Example build: docker build -t overte/overte-server-build:0.1.2-rockylinux-9 -f Dockerfile_build_rockylinux-9 .
FROM rockylinux:9 FROM rockylinux:9
LABEL maintainer="Julian Groß (julian.gro@overte.org)" LABEL maintainer="Julian Groß (julian.gro@overte.org)"
LABEL description="Development image for Overte Domain server and assignment clients." LABEL description="Development image for Overte Domain server and assignment clients."
@ -20,3 +23,6 @@ RUN dnf -y install zip unzip
# Install tools for package creation # Install tools for package creation
RUN dnf -y install chrpath rpmdevtools RUN dnf -y install chrpath rpmdevtools
# Install tools needed for our Github Actions Workflow
Run dnf -y install python3-boto3 python3-github

View file

@ -1,3 +1,8 @@
# Copyright 2013-2019 High Fidelity, Inc.
# Copyright 2020 Vircadia contributors.
# Copyright 2022 Overte e.V.
# SPDX-License-Identifier: Apache-2.0
# Post build script # Post build script
import os import os
import sys import sys

View file

@ -1,78 +0,0 @@
import os
import json
from hashlib import sha256
import http.client
from http import HTTPStatus
import time
import struct
import random
import glob
FILE_READ_BUFFER = 4096
path = os.path.join(os.getcwd(), os.environ['ARTIFACT_PATTERN'])
files = glob.glob(path, recursive=False)
uploading_files = []
for archive_file in files:
file = open(archive_file, 'rb')
sha256_hash = sha256()
file.seek(0, 0)
for byte_block in iter(lambda: file.read(FILE_READ_BUFFER), b""):
sha256_hash.update(byte_block)
checksum = sha256_hash.hexdigest()
uploading_files.append({
"filename": os.path.basename(archive_file),
"sha256_checksum": checksum,
"file_length": file.tell()
})
file.close()
print("BuildFileHashes: " + json.dumps(uploading_files))
file_contents = []
file_sizes = []
for archiveFile in files:
file = open(archiveFile, 'rb')
file_data = file.read()
file_sizes.append(len(file_data))
file_contents.append(file_data)
file.close()
# Connect to an instance of https://github.com/JulianGro/gha-artifact-uploader
conn = http.client.HTTPConnection("artifact-uploader.overte.org:3000")
context = json.loads(os.environ['GITHUB_CONTEXT'])
owner_and_repository = context["repository"].split("/")
owner = owner_and_repository[0]
repository = owner_and_repository[1]
headers = {
"owner": owner,
"repo": repository,
"commit_hash": context["event"]["pull_request"]["head"]["sha"],
"pull_number": context["event"]["number"],
"job_name": os.environ["JOB_NAME"],
"run_id": context["run_id"],
"file_sizes": ','.join(str(e) for e in file_sizes)
}
concat_file_body = b''.join(file_contents)
print("Total files size: " + str(len(concat_file_body)))
conn.request("PUT", "/", body=concat_file_body, headers=headers)
response = conn.getresponse()
EXIT_CODE_OK = 0
EXIT_CODE_ERROR = 1
if (response.status == HTTPStatus.OK):
print("response: ", json.loads(response.read()))
exit(EXIT_CODE_OK)
else:
print(response.status, response.reason, response.read())
exit(EXIT_CODE_ERROR)