Skip to content

MAUI: first steps #4156

MAUI: first steps

MAUI: first steps #4156

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
# 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--dotnet6-and-mono:
runs-on: macOS-13
steps:
- uses: actions/checkout@v1
with:
submodules: false
- name: Setup .NET SDK 6.0.x
uses: actions/[email protected]
with:
dotnet-version: '6.0.113'
- name: Install specific Xamarin.iOS and Xamarin.Android versions
run: |
wget https://download.visualstudio.microsoft.com/download/pr/81c41aaa-a3d7-4875-8416-d04b472379b7/21d9f6c5ad3a6bc2479b2ec4b0685b6c/xamarin.ios-16.0.0.72.pkg
sudo installer -pkg xamarin.ios-16.0.0.72.pkg -target /
wget https://aka.ms/xamarin-android-commercial-d17-3-macos --output-document=xamarin.android-13.0.0.0.pkg
sudo installer -pkg xamarin.android-13.0.0.0.pkg -target /
- name: Check versions
run: |
mono --version
/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/bin/mtouch --version
ls -l /Library/Frameworks/Xamarin.Android.framework/Versions/
- name: install maui workload
run: dotnet workload install maui
- name: configure
run: ./configure.sh
- name: build in DEBUG mode
run: make
- name: Build Maui Android frontend
run: |
# first run will give some errors related to Resource, so run build command twice
dotnet build src/GWallet.Frontend.Maui/GWallet.Frontend.Maui.fsproj --framework=net6.0-android || \
dotnet build src/GWallet.Frontend.Maui/GWallet.Frontend.Maui.fsproj --framework=net6.0-android
- name: Build Android APK
run: |
# first run will give some errors related to Resource, so run build command twice
dotnet publish src/GWallet.Frontend.Maui/GWallet.Frontend.Maui.fsproj --framework net6.0-android --configuration Release || \
dotnet publish src/GWallet.Frontend.Maui/GWallet.Frontend.Maui.fsproj --framework net6.0-android --configuration Release
- 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 }}
find . -type f -name "*.fsx" | xargs -t -I {} dotnet fsxc {}
macOS--mono-only:
runs-on: macOS-13
steps:
- uses: actions/checkout@v1
with:
submodules: false
- name: HACK to emulate dotnet uninstall
run: sudo rm -f `which dotnet`
- name: Install specific Xamarin.iOS and Xamarin.Android versions
run: |
wget https://download.visualstudio.microsoft.com/download/pr/81c41aaa-a3d7-4875-8416-d04b472379b7/21d9f6c5ad3a6bc2479b2ec4b0685b6c/xamarin.ios-16.0.0.72.pkg
sudo installer -pkg xamarin.ios-16.0.0.72.pkg -target /
wget https://aka.ms/xamarin-android-commercial-d17-3-macos --output-document=xamarin.android-13.0.0.0.pkg
sudo installer -pkg xamarin.android-13.0.0.0.pkg -target /
- name: Check versions
run: |
mono --version
/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/bin/mtouch --version
ls -l /Library/Frameworks/Xamarin.Android.framework/Versions/
- 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--dotnet6-only:
runs-on: macOS-13
steps:
- uses: actions/checkout@v1
with:
submodules: false
- name: Setup .NET SDK 6.0.x
uses: actions/[email protected]
with:
dotnet-version: '6.0.113'
- 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 }}
find . -type f -name "*.fsx" | xargs -t -I {} dotnet fsxc {}
windows--dotnet6-and-legacyFramework:
runs-on: windows-latest
steps:
- uses: actions/checkout@v1
with:
submodules: false
- name: Setup .NET SDK 6.0.x
uses: actions/[email protected]
with:
dotnet-version: '6.0.x'
- 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 }}
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--dotnet6-only:
runs-on: windows-latest
steps:
- uses: actions/checkout@v1
with:
submodules: false
- name: Setup .NET SDK 6.0.x
uses: actions/[email protected]
with:
dotnet-version: '6.0.113'
- name: HACK to emulate legacy .NETFramework uninstall
run: del $(& "${Env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -find MSBuild\\**\\Bin\\MSBuild.exe)
- 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 }}
find . -type f -name "*.fsx" | xargs -t -I {} dotnet fsxc {}
linux-github--dotnet-and-mono:
runs-on: ubuntu-22.04
env:
GtkSharpVersion: 3.24.24.77-develop
DotnetVersion: 6.0.300
steps:
- uses: actions/checkout@v1
with:
submodules: true
# We also tested using 6.0.111 for both projects
# but MAUI failed to build on this version with this error:
# Could not load file or assembly 'Microsoft.CodeAnalysis, Version=4.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
# so instead we use 6.0.300
- name: Setup .NET SDK ${{ env.DotnetVersion }}
uses: actions/[email protected]
with:
dotnet-version: ${{ env.DotnetVersion }}
- name: Install gtk workload
run: |
dotnet nuget add source --username ${{ github.repository_owner }} --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/GtkSharp/index.json"
# For some reason automatic workload manifest detection doesn't work (see https://github.com/GtkSharp/GtkSharp/issues/355#issuecomment-1446262239), so download and uzip mainfest file manually
wget --user ${{ github.repository_owner }} --password ${{ secrets.GITHUB_TOKEN }} https://nuget.pkg.github.com/GtkSharp/download/gtksharp.net.sdk.gtk.manifest-${{ env.DotnetVersion }}/$GtkSharpVersion/gtksharp.net.sdk.gtk.manifest-${{ env.DotnetVersion }}.nupkg
DOTNET_DIR=/home/runner/.dotnet
WORKLOAD_MANIFEST_DIR=$DOTNET_DIR/sdk-manifests/${{ env.DotnetVersion }}/gtksharp.net.sdk.gtk
unzip -j gtksharp.net.sdk.gtk.manifest-${{ env.DotnetVersion }}.nupkg "data/*" -d $WORKLOAD_MANIFEST_DIR/
rm gtksharp.net.sdk.gtk.manifest-${{ env.DotnetVersion }}.nupkg
chmod 764 $WORKLOAD_MANIFEST_DIR/*
dotnet workload search
dotnet workload install gtk --skip-manifest-update
- name: Add Maui Nuget source
run: |
cd dependencies/maui
dotnet nuget add source --username ${{ github.repository_owner }} --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/GtkSharp/index.json"
- 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: build Maui frontend
run: |
dotnet build src/GWallet.Frontend.Maui/GWallet.Frontend.Maui.fsproj --framework=net6.0-gtk
- 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 }}
# ignore scripts/fsx submodule as compiling scripts there will result in error
find . -type f -name "*.fsx" ! -path "./scripts/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 }}
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--stockdotnet6-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 dotnet6
# 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 }}
find . -type f -name "*.fsx" | xargs -t -I {} dotnet fsxc {}
linux-vanilla--stockdotnet6-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 dotnet6
- 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 }}
find . -type f -name "*.fsx" | xargs -t -I {} dotnet fsxc {}
linux-vanilla--stockdotnet6-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 dotnet6 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 }}
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--stockdotnet6-only
- linux-vanilla--stockdotnet6-and-stockmono
- linux-vanilla--stockdotnet6-and-newmono
- windows--dotnet6-and-legacyFramework
- windows--legacyFramework-only
- windows--dotnet6-only
- macOS--dotnet6-and-mono
- macOS--mono-only
- macOS--dotnet6-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: |
sudo apt update
./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: |
sudo apt update
./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