Skip to content

MAUI: first steps #4104

MAUI: first steps

MAUI: first steps #4104

Workflow file for this run

name: CI
on:
push:
pull_request:
workflow_dispatch:
# to execute once a day (more info see https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule )
schedule:
- cron: "0 0 * * *"
env:
# we need to install specific version because of this bug: https://github.com/dotnet/sdk/issues/24037
FSXC_VERSION: 0.5.9.1
GtkSharpVersion: 3.24.24.117-develop
DotNetVersionForMauiGtk: 8.0.200
# FIXME: figure out why we need to clean after make if we
# want 'make strict' target to really happen without
# assuming the binaries from previous build are good
# (msbuild bug?)
jobs:
macOS--dotnet8-and-mono:
runs-on: macOS-12
steps:
- uses: actions/checkout@v1
with:
submodules: false
- name: Setup .NET SDK 8.0.x
uses: actions/setup-dotnet@v1.7.2
with:
dotnet-version: '8.0.300'
- name: install maui workload
run: dotnet workload install maui
- name: configure
run: ./configure.sh
- name: build in DEBUG mode
run: make
- name: Build Android APK
run: dotnet publish src/GWallet.Frontend.Maui/GWallet.Frontend.Maui.fsproj --framework net8.0-android --configuration Release
# Upload artifact fails with "permission denied" error without this
- name: Fix permissions
run: sudo chmod -R 755 src/GWallet.Frontend.Maui/bin/Release/net8.0-android/publish
- name: Find the APK file's path and name
id: find_apk_file
run: |
FILEPATH=$(ls src/GWallet.Frontend.Maui/bin/Release/net8.0-android/publish/*.apk)
FILENAME=$(basename $FILEPATH)
echo "file_path=$FILEPATH" >> $GITHUB_OUTPUT
echo "file_name=$FILENAME" >> $GITHUB_OUTPUT
- name: Upload APK as CI artifact
uses: actions/upload-artifact@v3
with:
path: ${{ steps.find_apk_file.outputs.file_path }}
name: ${{ steps.find_apk_file.outputs.file_name }}
- name: sanity check
run: make sanitycheck
- name: unit tests
run: make check
- name: build in STRICT mode
run: git clean -fdx && ./configure.sh && make strict
- name: build in RELEASE mode
run: git clean -fdx && ./configure.sh && make release
- name: integration tests
run: make update-servers
- name: compile .fsx scripts
run: |
dotnet new tool-manifest
dotnet tool install fsxc --version ${{ env.FSXC_VERSION }}
# make it work with newer .NET
export DOTNET_ROLL_FORWARD=Major
find . -type f -name "*.fsx" | xargs -t -I {} dotnet fsxc {}
macOS--mono-only:
runs-on: macOS-12
steps:
- uses: actions/checkout@v1
with:
submodules: false
- name: HACK to emulate dotnet uninstall
run: sudo rm -f `which dotnet`
- name: configure
run: ./configure.sh
- name: build in DEBUG mode
run: make
- name: sanity check
run: make sanitycheck
- name: unit tests
run: make check
- name: build in STRICT mode
run: git clean -fdx && ./configure.sh && make strict
- name: build in RELEASE mode
run: git clean -fdx && ./configure.sh && make release
- name: integration tests
run: make update-servers
macOS--dotnet8-only:
runs-on: macOS-12
steps:
- uses: actions/checkout@v1
with:
submodules: false
- name: Setup .NET SDK 8.0.x
uses: actions/setup-dotnet@v1.7.2
with:
dotnet-version: '8.0.300'
- name: HACK to emulate mono uninstall
run: sudo rm -f `which mono` && sudo rm -f `which msbuild`
- name: configure
run: ./configure.sh
- name: build in DEBUG mode
run: make
- name: sanity check
run: make sanitycheck
- name: unit tests
run: make check
- name: build in STRICT mode
run: git clean -fdx && ./configure.sh && make strict
- name: build in RELEASE mode
run: git clean -fdx && ./configure.sh && make release
- name: integration tests
run: make update-servers
- name: compile .fsx scripts
run: |
dotnet new tool-manifest
dotnet tool install fsxc --version ${{ env.FSXC_VERSION }}
# make it work with newer .NET
export DOTNET_ROLL_FORWARD=Major
find . -type f -name "*.fsx" | xargs -t -I {} dotnet fsxc {}
windows--dotnet8-and-legacyFramework:
runs-on: windows-latest
steps:
- uses: actions/checkout@v1
with:
submodules: false
- name: Setup .NET SDK 8.0.x
uses: actions/setup-dotnet@v1.7.2
with:
dotnet-version: '8.0.x'
- name: install maui workloads
run: dotnet workload install maui
- name: configure
run: .\configure.bat
- name: build in DEBUG mode
run: .\make.bat
- name: sanity check
run: .\make.bat sanitycheck
- name: unit tests
run: .\make.bat check
- name: re-build in STRICT mode
run: git clean -fdx && .\configure.bat && .\make.bat strict
- name: re-build in RELEASE mode
run: git clean -fdx && .\configure.bat && .\make.bat release
- name: integration tests
run: .\make update-servers
- name: compile .fsx scripts
shell: bash
run: |
dotnet new tool-manifest
dotnet tool install fsxc --version ${{ env.FSXC_VERSION }}
# make it work with newer .NET
export DOTNET_ROLL_FORWARD=Major
find . -type f -name "*.fsx" | xargs -t -I {} dotnet fsxc {}
windows--legacyFramework-only:
runs-on: windows-2019
steps:
- uses: actions/checkout@v1
with:
submodules: false
- name: HACK to emulate dotnet uninstall
run: del $(where.exe dotnet)
- name: configure
run: .\configure.bat
- name: build in DEBUG mode
run: .\make.bat
- name: sanity check
run: .\make.bat sanitycheck
- name: unit tests
run: .\make.bat check
- name: re-build in STRICT mode
run: git clean -fdx && .\configure.bat && .\make.bat strict
- name: re-build in RELEASE mode
run: git clean -fdx && .\configure.bat && .\make.bat release
- name: integration tests
run: .\make update-servers
windows--dotnet8-only:
runs-on: windows-latest
steps:
- uses: actions/checkout@v1
with:
submodules: false
- name: Setup .NET SDK 8.0.x
uses: actions/setup-dotnet@v1.7.2
with:
dotnet-version: '8.0.x'
- name: HACK to emulate legacy .NETFramework uninstall
run: del $(& "${Env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -find MSBuild\\**\\Bin\\MSBuild.exe)
- name: install maui workloads
run: dotnet workload install maui
- name: configure
run: .\configure.bat
- name: build in DEBUG mode
run: .\make.bat
- name: sanity check
run: .\make.bat sanitycheck
- name: unit tests
run: .\make.bat check
- name: re-build in STRICT mode
run: git clean -fdx && .\configure.bat && .\make.bat strict
- name: re-build in RELEASE mode
run: git clean -fdx && .\configure.bat && .\make.bat release
- name: integration tests
run: .\make update-servers
- name: compile .fsx scripts
shell: bash
run: |
dotnet new tool-manifest
dotnet tool install fsxc --version ${{ env.FSXC_VERSION }}
# make it work with newer .NET
export DOTNET_ROLL_FORWARD=Major
find . -type f -name "*.fsx" | xargs -t -I {} dotnet fsxc {}
linux-github--dotnet-and-mono:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v1
with:
submodules: true
- name: Setup .NET SDK ${{ env.DotNetVersionForMauiGtk }}
uses: actions/setup-dotnet@v1.7.2
with:
dotnet-version: ${{ env.DotNetVersionForMauiGtk }}
- name: Install gtk workload & add Maui Nuget source
run: ./scripts/prepare_maui_gtk.sh
- name: install missing dependencies
run: sudo apt install --yes fsharp nunit-console
- name: check mono version
run: mono --version
- name: configure
run: ./configure.sh
- name: build in DEBUG mode
run: make
- name: sanity check
run: make sanitycheck
- name: unit tests
run: make check
- name: build in STRICT mode
run: git clean -fdx && ./configure.sh && make strict
- name: build in RELEASE mode
run: git clean -fdx && ./configure.sh && make release
- name: integration tests
run: make update-servers
- name: compile .fsx scripts
run: |
dotnet new tool-manifest
dotnet tool install fsxc --version ${{ env.FSXC_VERSION }}
# make it work with newer .NET
export DOTNET_ROLL_FORWARD=Major
find . -type f -name "*.fsx" | xargs -t -I {} dotnet fsxc {}
linux-github--dotnet-and-newmono:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v1
with:
submodules: false
- name: install missing dependencies
run: sudo apt install --yes fsharp nunit-console
- name: install last version of mono (Microsoft APT repositories)
run: sudo ./scripts/install_mono_from_microsoft_deb_packages.sh
- name: check mono version
run: mono --version
- name: install GTK libs (dependency of GTK frontend)
run: sudo apt install --yes libgtk2.0-cil-dev
- name: configure
run: ./configure.sh
- name: build in DEBUG mode (retry 3 times because of flakey XamForms restore)
# TODO: remove retry when we migrate to .NET6 (removing LEGACY_FRAMEWORK support)
run: make || make || make || make
- name: sanity check
run: make sanitycheck
- name: unit tests
run: make check
- name: build in STRICT mode
run: git clean -fdx && ./configure.sh && make strict
- name: build in RELEASE mode
run: git clean -fdx && ./configure.sh && make release
- name: integration tests
run: make update-servers
- name: compile .fsx scripts
run: |
dotnet new tool-manifest
dotnet tool install fsxc --version ${{ env.FSXC_VERSION }}
# make it work with newer .NET
export DOTNET_ROLL_FORWARD=Major
find . -type f -name "*.fsx" | xargs -t -I {} dotnet fsxc {}
linux-vanilla--stockmono-only:
runs-on: ubuntu-22.04
container:
image: "ubuntu:22.04"
steps:
- uses: actions/checkout@v1
# can't use the option below because of error "Input 'submodules' not supported when falling back to download using the GitHub REST API. To create a local Git repository instead, add Git 2.18 or higher to the PATH."
# with:
# submodules: 'true'
- name: install sudo
run: apt update && apt install --yes sudo
- name: install all dependencies
run: |
# needed by fsx submodule
sudo apt install --yes curl
sudo DEBIAN_FRONTEND=noninteractive apt install --yes git make fsharp nunit-console
# workaround for https://github.com/actions/runner/issues/2033
- name: ownership workaround
run: git config --global --add safe.directory '*'
- name: check mono version
run: mono --version
- name: configure
run: ./configure.sh
- name: build in DEBUG mode
run: make
- name: sanity check
run: make sanitycheck
- name: unit tests
run: make check
- name: build in STRICT mode
run: git clean -fdx && ./configure.sh && make strict
- name: build in RELEASE mode
run: git clean -fdx && ./configure.sh && make release
- name: integration tests
run: make update-servers
linux-vanilla--stockdotnet8-only:
runs-on: ubuntu-22.04
container:
image: "ubuntu:22.04"
steps:
- uses: actions/checkout@v1
# can't use the option below because of error "Input 'submodules' not supported when falling back to download using the GitHub REST API. To create a local Git repository instead, add Git 2.18 or higher to the PATH."
# with:
# submodules: 'true'
- name: install sudo
run: apt update && apt install --yes sudo
- name: install all dependencies
run: sudo DEBIAN_FRONTEND=noninteractive apt install --yes git make dotnet8
# workaround for https://github.com/actions/runner/issues/2033
- name: ownership workaround
run: git config --global --add safe.directory '*'
- name: configure
run: ./configure.sh
- name: build in DEBUG mode
run: make
- name: sanity check
run: make sanitycheck
- name: unit tests
run: make check
- name: build in STRICT mode
run: git clean -fdx && ./configure.sh && make strict
- name: build in RELEASE mode
run: git clean -fdx && ./configure.sh && make release
- name: integration tests
run: make update-servers
- name: compile .fsx scripts
run: |
dotnet new tool-manifest
dotnet tool install fsxc --version ${{ env.FSXC_VERSION }}
# make it work with newer .NET
export DOTNET_ROLL_FORWARD=Major
find . -type f -name "*.fsx" | xargs -t -I {} dotnet fsxc {}
linux-vanilla--stockdotnet8-and-newmono:
runs-on: ubuntu-22.04
container:
image: "ubuntu:22.04"
steps:
- uses: actions/checkout@v1
# can't use the option below because of error "Input 'submodules' not supported when falling back to download using the GitHub REST API. To create a local Git repository instead, add Git 2.18 or higher to the PATH."
# with:
# submodules: 'true'
- name: install sudo
run: apt update && apt install --yes sudo
- name: install all dependencies
run: sudo DEBIAN_FRONTEND=noninteractive apt install --yes git make dotnet8
- name: install last version of mono (Microsoft APT repositories)
run: sudo ./scripts/install_mono_from_microsoft_deb_packages.sh
# workaround for https://github.com/actions/runner/issues/2033
- name: ownership workaround
run: git config --global --add safe.directory '*'
- name: configure
run: ./configure.sh
- name: build in DEBUG mode
run: make
- name: sanity check
run: make sanitycheck
- name: unit tests
run: make check
- name: build in STRICT mode
run: git clean -fdx && ./configure.sh && make strict
- name: build in RELEASE mode
run: git clean -fdx && ./configure.sh && make release
- name: integration tests
run: make update-servers
- name: compile .fsx scripts
run: |
dotnet new tool-manifest
dotnet tool install fsxc --version ${{ env.FSXC_VERSION }}
# make it work with newer .NET
export DOTNET_ROLL_FORWARD=Major
find . -type f -name "*.fsx" | xargs -t -I {} dotnet fsxc {}
linux-vanilla--stockdotnet8-and-stockmono:
runs-on: ubuntu-22.04
container:
image: "ubuntu:22.04"
steps:
- uses: actions/checkout@v1
# can't use the option below because of error "Input 'submodules' not supported when falling back to download using the GitHub REST API. To create a local Git repository instead, add Git 2.18 or higher to the PATH."
# with:
# submodules: 'true'
- name: install sudo
run: apt update && apt install --yes sudo
- name: install all dependencies
run: sudo DEBIAN_FRONTEND=noninteractive apt install --yes git make dotnet8 mono-xbuild fsharp
- name: install GTK libs (dependency of GTK frontend)
run: sudo apt install --yes libgtk2.0-cil-dev
# workaround for https://github.com/actions/runner/issues/2033
- name: ownership workaround
run: git config --global --add safe.directory '*'
- name: configure
run: ./configure.sh
- name: build in DEBUG mode
run: make
- name: sanity check
run: make sanitycheck
- name: unit tests
run: make check
- name: build in STRICT mode
run: git clean -fdx && ./configure.sh && make strict
- name: build in RELEASE mode
run: git clean -fdx && ./configure.sh && make release
- name: integration tests
run: make update-servers
- name: compile .fsx scripts
run: |
dotnet new tool-manifest
dotnet tool install fsxc --version ${{ env.FSXC_VERSION }}
# make it work with newer .NET
export DOTNET_ROLL_FORWARD=Major
find . -type f -name "*.fsx" | xargs -t -I {} dotnet fsxc {}
linux-vanilla--newmono-only:
runs-on: ubuntu-22.04
container:
image: "ubuntu:22.04"
steps:
- uses: actions/checkout@v1
# can't use the option below because of error "Input 'submodules' not supported when falling back to download using the GitHub REST API. To create a local Git repository instead, add Git 2.18 or higher to the PATH."
# with:
# submodules: 'true'
- name: install sudo
run: apt update && apt install --yes sudo
- name: install all dependencies
run: sudo DEBIAN_FRONTEND=noninteractive apt install --yes git make fsharp nunit-console
- name: install last version of mono (Microsoft APT repositories)
run: sudo ./scripts/install_mono_from_microsoft_deb_packages.sh
# workaround for https://github.com/actions/runner/issues/2033
- name: ownership workaround
run: git config --global --add safe.directory '*'
- name: check mono version
run: mono --version
- name: install GTK libs (dependency of GTK frontend)
run: sudo apt install --yes libgtk2.0-cil-dev
- name: configure
run: ./configure.sh
- name: build in DEBUG mode (retry 3 times because of flakey XamForms restore)
# TODO: remove retry when we migrate to .NET6 (removing LEGACY_FRAMEWORK support)
run: make || make || make || make
- name: sanity check
run: make sanitycheck
- name: unit tests
run: make check
- name: build in STRICT mode
run: git clean -fdx && ./configure.sh && make strict
- name: build in RELEASE mode
run: git clean -fdx && ./configure.sh && make release
- name: integration tests
run: make update-servers
conventions:
runs-on: ubuntu-22.04
container:
image: "ubuntu:22.04"
needs:
- linux-github--dotnet-and-mono
- linux-github--dotnet-and-newmono
- linux-vanilla--stockmono-only
- linux-vanilla--newmono-only
- linux-vanilla--stockdotnet8-only
- linux-vanilla--stockdotnet8-and-stockmono
- linux-vanilla--stockdotnet8-and-newmono
- windows--dotnet8-and-legacyFramework
- windows--legacyFramework-only
- windows--dotnet8-only
- macOS--dotnet8-and-mono
- macOS--mono-only
- macOS--dotnet8-only
steps:
- uses: actions/checkout@v1
with:
submodules: false
- name: Install dependencies of commitlint
run: |
which sudo 2>/dev/null || (apt update && apt install --yes sudo)
sudo apt update
sudo apt install --yes git npm curl
sudo npm install --global n
sudo n lts
# workaround for https://github.com/actions/runner/issues/2033
- name: ownership workaround
run: git config --global --add safe.directory '*'
- name: Pull our commitlint configuration
run: |
git clone https://github.com/nblockchain/conventions.git
rm -rf ./conventions/.git/
- name: Validate current commit (last commit) with commitlint
if: github.event_name == 'push'
run: ./conventions/commitlint.sh --from HEAD~1 --to HEAD --verbose
- name: Validate PR commits with commitlint
if: github.event_name == 'pull_request'
run: ./conventions/commitlint.sh --from ${{ github.event.pull_request.head.sha }}~${{ github.event.pull_request.commits }} --to ${{ github.event.pull_request.head.sha }} --verbose
snap_pkg:
needs:
- conventions
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v1
- name: Install snap tools
run: ./scripts/install_snapcraft.sh
# hack to disable msbuild detection
# NOTE: you might think an easier way to do this would be use container:\nimage: ubuntu22.04 and then not install msbuild,
# but that doesn't work because we get the following error when trying to install snapcraft via `snap install --classic`:
# > error: cannot communicate with server: Post "http://localhost/v2/snaps/snapcraft": dial unix /run/snapd.socket: connect: no such file or directory
- name: HACK to emulate msbuild uninstall
run: sudo rm `which msbuild`
- name: Generate snap package
run: |
# retry 3 times because of flakey nuget; TODO: remove retry when we migrate to .NET6 (removing LEGACY_FRAMEWORK support)
./scripts/snap_build.sh || ./scripts/snap_build.sh || ./scripts/snap_build.sh || ./scripts/snap_build.sh
- name: Install snap
# dangerous because it's a local snap (not one from the SnapStore)
run: sudo snap install --dangerous *.snap
- name: Test snap
run: geewallet --version
- uses: actions/upload-artifact@v3
name: Upload snap package as artifact
with:
name: snap
path: ./*.snap
- name: Upload snap package to Snap Store
env:
SNAPCRAFT_LOGIN: ${{ secrets.SNAPCRAFT_LOGIN }}
run: |
sudo apt update
./scripts/snap_release.sh
snap_pkg_beta:
needs:
- conventions
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v1
- name: Install snap tools
run: ./scripts/install_snapcraft.sh
# hack to disable msbuild detection
# NOTE: you might think an easier way to do this would be use container:\nimage: ubuntu22.04 and then not install msbuild,
# but that doesn't work because we get the following error when trying to install snapcraft via `snap install --classic`:
# > error: cannot communicate with server: Post "http://localhost/v2/snaps/snapcraft": dial unix /run/snapd.socket: connect: no such file or directory
- name: HACK to emulate msbuild uninstall
run: sudo rm `which msbuild`
- name: Bump snap version
run: |
git submodule foreach git fetch --all && git submodule sync --recursive && git submodule update --init --recursive
dotnet fsi ./scripts/snap_bump.fsx
- name: Generate snap package
run: |
# retry 3 times because of flakey nuget; TODO: remove retry when we migrate to .NET6 (removing LEGACY_FRAMEWORK support)
./scripts/snap_build.sh --native-segwit || ./scripts/snap_build.sh --native-segwit || ./scripts/snap_build.sh --native-segwit || ./scripts/snap_build.sh --native-segwit
- name: Install snap
# dangerous because it's a local snap (not one from the SnapStore)
run: sudo snap install --dangerous *.snap
- name: Test snap
run: geewallet --version
- uses: actions/upload-artifact@v3
name: Upload snap package as artifact
with:
name: snap_beta
path: ./*.snap
- name: Upload snap package to Snap Store
env:
SNAPCRAFT_LOGIN: ${{ secrets.SNAPCRAFT_LOGIN }}
run: |
sudo apt update
./scripts/snap_release.sh beta
snap_alpha:
needs:
- conventions
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v1
- name: Install snap tools
run: ./scripts/install_snapcraft.sh maui
- name: Setup .NET SDK ${{ env.DotNetVersionForMauiGtk }}
uses: actions/setup-dotnet@v1.7.2
with:
dotnet-version: ${{ env.DotNetVersionForMauiGtk }}
- name: Bump snap version
run: |
git submodule foreach git fetch --all && git submodule sync --recursive && git submodule update --init --recursive
dotnet fsi ./scripts/snap_bump.fsx
- name: Generate snap package
run: ./scripts/snap_build_maui.sh || (cat /home/runner/.local/state/snapcraft/log/*.log && exit 1)
- name: Install snap
# dangerous because it's a local snap (not one from the SnapStore)
run: sudo snap install --dangerous *.snap
- name: Test snap
run: gee-maui-preview.geewallet --version
- uses: actions/upload-artifact@v3
name: Upload snap package as artifact
with:
name: snap_alpha
path: ./*.snap