cmake(ci): Add FreeBSD Vagrant for other languages

This commit is contained in:
Mizux Seiha
2020-09-23 21:28:34 +02:00
parent 7a6d0fb793
commit fbdf62b274
6 changed files with 420 additions and 27 deletions

View File

@@ -1,4 +1,4 @@
name: Vagrant
name: Vagrant CMake
on: [push, pull_request]
@@ -6,6 +6,23 @@ jobs:
# Only macos runner provide virtualisation with vagrant/virtualbox installed.
FreeBSD:
runs-on: macos-latest
continue-on-error: ${{ matrix.allow_failure }}
strategy:
fail-fast: false
matrix:
distro: [freebsd]
lang: [cpp, python]
allow_failure: [false]
include:
- distro: freebsd
lang: java
allow_failure: true
- distro: freebsd
lang: dotnet
allow_failure: true
env:
DISTRO: ${{ matrix.distro }}
LANG: ${{ matrix.lang }}
steps:
- uses: actions/checkout@v2
- name: vagrant version
@@ -13,4 +30,4 @@ jobs:
- name: VirtualBox version
run: virtualbox -h
- name: Build
run: make --directory=cmake freebsd
run: make --directory=cmake ${DISTRO}_${LANG}

View File

@@ -34,7 +34,7 @@ help:
@echo -e "\t${BOLD}save_<distro>_<lang>_<stage>${RESET}: Save the <stage> docker image for a specific distro for a specific language."
@echo -e "\t${BOLD}sh_<distro>_<lang>_<stage>${RESET}: run a container using the <stage> docker image specified (debug purpose)."
@echo
@echo -e "\t${BOLD}<distro>${RESET}:"
@echo -e "\tWith ${BOLD}<distro>${RESET}:"
@echo -e "\t\t${BOLD}alpine${RESET} (edge)"
@echo -e "\t\t${BOLD}archlinux${RESET} (latest)"
@echo -e "\t\t${BOLD}centos${RESET} (latest)"
@@ -44,19 +44,19 @@ help:
@echo -e "\t\t${BOLD}ubuntu${RESET} (rolling)"
@echo -e "\te.g. 'make test_ubuntu'"
@echo
@echo -e "\t${BOLD}<prestage>${RESET}:"
@echo -e "\tWith ${BOLD}<prestage>${RESET}:"
@echo -e "\t\t${BOLD}base${RESET} (need by cpp)"
@echo -e "\t\t${BOLD}swig${RESET} (need by .Net, Java and Python)"
@echo -e "\te.g. 'make base'"
@echo
@echo -e "\t${BOLD}<lang>${RESET}:"
@echo -e "\tWith ${BOLD}<lang>${RESET}:"
@echo -e "\t\t${BOLD}cpp${RESET} (C++)"
@echo -e "\t\t${BOLD}python${RESET} (Python >= 3)"
@echo -e "\t\t${BOLD}java${RESET} (Java >= 8)"
@echo -e "\t\t${BOLD}dotnet${RESET} (.Net Core >= 2.1)"
@echo -e "\te.g. 'make devel_cpp'"
@echo
@echo -e "\t${BOLD}<stage>${RESET}:"
@echo -e "\tWith ${BOLD}<stage>${RESET}:"
@echo -e "\t\t${BOLD}env${RESET}"
@echo -e "\t\t${BOLD}devel${RESET}"
@echo -e "\t\t${BOLD}build${RESET}"
@@ -68,9 +68,11 @@ help:
@echo -e "\te.g. 'make build'"
@echo
@echo
@echo -e "\t${BOLD}<VM>${RESET}: build the vagrant <VM> virtual machine."
@echo -e "\t${BOLD}<vm>${RESET}: build <vm> vagrant machine for ALL LANGUAGES."
@echo -e "\t${BOLD}<vm>_<lang>${RESET}: build a <vm> vagrant machine for the specified language."
@echo -e "\t${BOLD}sh_<vm>_<lang>${RESET}: ssh to the vagrant machine specified (debug purpose)."
@echo
@echo -e "\t${BOLD}<VM>${RESET}:"
@echo -e "\tWith ${BOLD}<vm>${RESET}:"
@echo -e "\t\t${BOLD}freebsd${RESET} (FreeBSD)"
@echo
@echo
@@ -303,9 +305,27 @@ $(foreach stage,$(STAGES),$(eval $(call make-stage-target,$(stage))))
#############
VMS = freebsd
$(VMS): %: vagrant/%/Vagrantfile
@cd vagrant/$* && vagrant destroy -f
cd vagrant/$* && vagrant up
targets_freebsd = $(addprefix freebsd_, $(LANGUAGES))
.PHONY: freebsd $(targets_freebsd)
freebsd: $(targets_freebsd)
$(targets_freebsd): freebsd_%: vagrant/freebsd/%/Vagrantfile
@cd vagrant/freebsd/$* && vagrant destroy -f
cd vagrant/freebsd/$* && vagrant up
# SSH to a freebsd_<lang> vagrant machine (debug).
targets_freebsd = $(addprefix sh_freebsd_, $(LANGUAGES))
.PHONY: $(targets_freebsd)
$(targets_freebsd): sh_freebsd_%:
cd vagrant/freebsd/$* && vagrant ssh
# Clean FreeBSD vagrant machine
targets_freebsd = $(addprefix clean_freebsd_, $(LANGUAGES))
.PHONY: clean_freebsd $(targets_freebsd)
clean_freebsd: $(targets_freebsd)
$(targets_freebsd): clean_freebsd_%:
cd vagrant/freebsd/$* && vagrant destroy -f
-rm -rf vagrant/freebsd/$*/.vagrant
# CLEAN
targets = $(addprefix clean_, $(DISTROS))
@@ -317,11 +337,9 @@ clean: $(targets) $(vms)
-rmdir cache
$(targets): clean_%: $(addprefix clean_%_, $(PRESTAGES)) $(addprefix clean_%_, $(STAGES))
-rmdir cache/$*
$(vms): clean_%:
cd vagrant/$* && vagrant destroy -f
-rm -rf vagrant/$*/.vagrant
.PHONY: distclean
distclean: clean
-docker container rm -f $$(docker container ls -aq)
-docker image rm -f $$(docker image ls -aq)
-vagrant box remove -f generic/freebsd12

View File

@@ -14,7 +14,9 @@ Vagrant.configure("2") do |config|
# boxes at https://vagrantcloud.com/search.
config.vm.guest = :freebsd
config.vm.box = "generic/freebsd12"
config.vm.provider "virtualbox" do |v|
v.name = "ortools_freebsd_cpp"
end
config.ssh.shell = "sh"
# Disable automatic box update checking. If you disable this, then
@@ -75,18 +77,18 @@ Vagrant.configure("2") do |config|
pkg install -y git cmake
SHELL
config.vm.provision "file", source: "../../../CMakeLists.txt", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../cmake", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../ortools", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../examples/contrib", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../examples/cpp", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../examples/dotnet", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../examples/java", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../examples/python", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../examples/tests", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../patches", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../Version.txt", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../dependencies", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../CMakeLists.txt", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../cmake", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../ortools", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../examples/contrib", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/cpp", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../dependencies", destination: "$HOME/project/"
config.vm.provision "devel", type: "shell", inline:<<-SHELL
set -x

118
cmake/vagrant/freebsd/dotnet/Vagrantfile vendored Normal file
View File

@@ -0,0 +1,118 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.guest = :freebsd
config.vm.box = "generic/freebsd12"
config.vm.provider "virtualbox" do |v|
v.name = "ortools_freebsd_dotnet"
end
config.ssh.shell = "sh"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
#config.vm.synced_folder "../../..", "/home/vagrant/project"
config.vm.synced_folder ".", "/vagrant", id: "vagrant-root", disabled: true
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
#
# View the documentation for the provider you are using for more
# information on available options.
# Enable provisioning with a shell script. Additional provisioners such as
# Ansible, Chef, Docker, Puppet and Salt are also available. Please see the
# documentation for more information about their specific syntax and use.
# note: clang installed by default
config.vm.provision "env", type: "shell", inline:<<-SHELL
set -x
pkg update -f
pkg install -y git cmake
kldload linux64
pkg install -y swig linux-dotnet-sdk
SHELL
config.vm.provision "file", source: "../../../../CMakeLists.txt", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../cmake", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../ortools", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../examples/contrib", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/cpp", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../dependencies", destination: "$HOME/project/"
config.vm.provision "devel", type: "shell", inline:<<-SHELL
set -x
cd project
ls
SHELL
config.vm.provision "configure", type: "shell", inline:<<-SHELL
set -x
cd project
cmake -S. -Bbuild -DBUILD_DOTNET=ON -DBUILD_CXX_SAMPLES=OFF -DBUILD_CXX_EXAMPLES=OFF
SHELL
config.vm.provision "build", type: "shell", inline:<<-SHELL
set -x
cd project
cmake --build build -v
SHELL
config.vm.provision "test", type: "shell", inline:<<-SHELL
set -x
cd project
cmake --build build --target test -v
SHELL
end

120
cmake/vagrant/freebsd/java/Vagrantfile vendored Normal file
View File

@@ -0,0 +1,120 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.guest = :freebsd
config.vm.box = "generic/freebsd12"
config.vm.provider "virtualbox" do |v|
v.name = "ortools_freebsd_java"
end
config.ssh.shell = "sh"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
#config.vm.synced_folder "../../..", "/home/vagrant/project"
config.vm.synced_folder ".", "/vagrant", id: "vagrant-root", disabled: true
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
#
# View the documentation for the provider you are using for more
# information on available options.
# Enable provisioning with a shell script. Additional provisioners such as
# Ansible, Chef, Docker, Puppet and Salt are also available. Please see the
# documentation for more information about their specific syntax and use.
# note: clang installed by default
config.vm.provision "env", type: "shell", inline:<<-SHELL
set -x
pkg update -f
pkg install -y git cmake
pkg install -y swig openjdk11 maven
mount -t fdescfs fdesc /dev/fd
mount -t procfs proc /proc
SHELL
config.vm.provision "file", source: "../../../../CMakeLists.txt", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../cmake", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../ortools", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../examples/contrib", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/cpp", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../dependencies", destination: "$HOME/project/"
config.vm.provision "devel", type: "shell", inline:<<-SHELL
set -x
cd project
ls
SHELL
config.vm.provision "configure", type: "shell", inline:<<-SHELL
set -x
cd project
export JAVA_HOME=/usr/local/openjdk11
cmake -S. -Bbuild -DBUILD_JAVA=ON -DBUILD_CXX_SAMPLES=OFF -DBUILD_CXX_EXAMPLES=OFF
SHELL
config.vm.provision "build", type: "shell", inline:<<-SHELL
set -x
cd project
cmake --build build -v
SHELL
config.vm.provision "test", type: "shell", inline:<<-SHELL
set -x
cd project
cmake --build build --target test -v
SHELL
end

118
cmake/vagrant/freebsd/python/Vagrantfile vendored Normal file
View File

@@ -0,0 +1,118 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.guest = :freebsd
config.vm.box = "generic/freebsd12"
config.vm.provider "virtualbox" do |v|
v.name = "ortools_freebsd_python"
end
config.ssh.shell = "sh"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
#config.vm.synced_folder "../../..", "/home/vagrant/project"
config.vm.synced_folder ".", "/vagrant", id: "vagrant-root", disabled: true
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
#
# View the documentation for the provider you are using for more
# information on available options.
# Enable provisioning with a shell script. Additional provisioners such as
# Ansible, Chef, Docker, Puppet and Salt are also available. Please see the
# documentation for more information about their specific syntax and use.
# note: clang installed by default
config.vm.provision "env", type: "shell", inline:<<-SHELL
set -x
pkg update -f
pkg install -y git cmake
pkg install -y swig python py37-pip
SHELL
config.vm.provision "file", source: "../../../../CMakeLists.txt", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../cmake", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../ortools", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../examples/contrib", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/cpp", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/"
config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../dependencies", destination: "$HOME/project/"
config.vm.provision "file", source: "../../../../test.py.in", destination: "$HOME/project/"
config.vm.provision "devel", type: "shell", inline:<<-SHELL
set -x
cd project
ls
SHELL
config.vm.provision "configure", type: "shell", inline:<<-SHELL
set -x
cd project
cmake -S. -Bbuild -DBUILD_PYTHON=ON -DBUILD_CXX_SAMPLES=OFF -DBUILD_CXX_EXAMPLES=OFF
SHELL
config.vm.provision "build", type: "shell", inline:<<-SHELL
set -x
cd project
cmake --build build -v
SHELL
config.vm.provision "test", type: "shell", inline:<<-SHELL
set -x
cd project
cmake --build build --target test -v
SHELL
end