From b70fbfd40a58373a7b497d6ee33fb35900cb46f2 Mon Sep 17 00:00:00 2001 From: Alex Arslan Date: Mon, 5 Sep 2022 13:36:06 -0700 Subject: [PATCH 1/5] Attempt a Starlark module for configuration Cirrus gives you the option to use .cirrus.star files that can load external Starlark modules to provide various pieces of functionality for testing on Cirrus. Gonna give this a try since hopefully it will make cross-platform support a bit easier but also I don't really know what I'm doing. --- .cirrus.yml | 11 ++++++++--- lib.star | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 lib.star diff --git a/.cirrus.yml b/.cirrus.yml index 967fa43..1f180c2 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -1,7 +1,7 @@ -freebsd_instance: - image: freebsd-12-2-release-amd64 task: - name: FreeBSD + name: Julia on FreeBSD + freebsd_instance: + image: freebsd-12-2-release-amd64 env: matrix: - JULIA_VERSION: 1.6 @@ -16,3 +16,8 @@ task: - cirrusjl test coverage_script: - cirrusjl coverage codecov coveralls +task: + name: Starlark setup + container: + image: gcr.io/cirrus-ci-community/cirrus-cli:latest + script: cirrus internal test diff --git a/lib.star b/lib.star new file mode 100644 index 0000000..6601a7f --- /dev/null +++ b/lib.star @@ -0,0 +1,37 @@ +load("cirrus", environ="env") +load("github.com/cirrus-modules/helpers", "powershell", "script", "task") + +def cirrusjl_install(): + base = "https://raw.githubusercontent.com/ararslan/CirrusCI.jl/master/bin" + os = environ["CIRRUS_OS"] + if os == "windows": + file = base + "/install.ps1" + cmd = "iex ((New-Object System.Net.WebClient).DownloadString('%s'))" % file + return powershell("install", cmd) + file = base + "/install.sh" + if os == "darwin": + download = "curl " + file + elif os == "freebsd": + download = "fetch %s -o -" % file + else: + download = "wget %s -q -O-" % file + cmd = "sh -c \"$(%s)\"" % download + return script("install", cmd) + +def julia_instructions(coverage=None): + steps = [cirrusjl_install(), + script("build", "cirrusjl build"), + script("test", "cirrusjl test")] + if coverage: + steps.append(script("coverage", "cirrusjl coverage %s" % coverage)) + return steps + +def julia_tasks(versions, instances, env={}, coverage=None, allow_failures=None): + tasks = [] + instructions = julia_instructions(coverage=coverage) + for instance in instances: + for version in versions: + v = {"JULIA_VERSION": version}.update(env) + t = task(name="", instance=instance, instructions=instructions, env=v) + tasks.append(t) + return tasks From 89662b01f544be8a98af8a6055773414495e562e Mon Sep 17 00:00:00 2001 From: Alex Arslan Date: Mon, 5 Sep 2022 14:01:47 -0700 Subject: [PATCH 2/5] wip: Try actually testing the Starlark thing --- .cirrus.yml | 36 +++++++++++----------- test/cirrusjl_install/.cirrus.expected.yml | 30 ++++++++++++++++++ test/cirrusjl_install/.cirrus.star | 13 ++++++++ 3 files changed, 61 insertions(+), 18 deletions(-) create mode 100644 test/cirrusjl_install/.cirrus.expected.yml create mode 100644 test/cirrusjl_install/.cirrus.star diff --git a/.cirrus.yml b/.cirrus.yml index 1f180c2..af5b4b0 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -1,21 +1,21 @@ -task: - name: Julia on FreeBSD - freebsd_instance: - image: freebsd-12-2-release-amd64 - env: - matrix: - - JULIA_VERSION: 1.6 - - JULIA_VERSION: 1 - - JULIA_VERSION: nightly - allow_failures: $JULIA_VERSION == 'nightly' - install_script: - - sh bin/install.sh - build_script: - - cirrusjl build - test_script: - - cirrusjl test - coverage_script: - - cirrusjl coverage codecov coveralls +#task: +# name: Julia on FreeBSD +# freebsd_instance: +# image: freebsd-12-2-release-amd64 +# env: +# matrix: +# - JULIA_VERSION: 1.6 +# - JULIA_VERSION: 1 +# - JULIA_VERSION: nightly +# allow_failures: $JULIA_VERSION == 'nightly' +# install_script: +# - sh bin/install.sh +# build_script: +# - cirrusjl build +# test_script: +# - cirrusjl test +# coverage_script: +# - cirrusjl coverage codecov coveralls task: name: Starlark setup container: diff --git a/test/cirrusjl_install/.cirrus.expected.yml b/test/cirrusjl_install/.cirrus.expected.yml new file mode 100644 index 0000000..5bb1a82 --- /dev/null +++ b/test/cirrusjl_install/.cirrus.expected.yml @@ -0,0 +1,30 @@ +task: + name: FreeBSD + freebsd_instance: + image: freebsd-13-0-release-amd64 + install_script: + - sh -c "$(fetch https://raw.githubusercontent.com/ararslan/CirrusCI.jl/master/bin/install.sh -o -)" +task: + name: Linux AArch64 + arm_container: + image: ubuntu:latest + install_script: + - sh -c "$(wget https://raw.githubusercontent.com/ararslan/CirrusCI.jl/master/bin/install.sh -q -O-)" +task: + name: Linux musl + container: + image: alpine:3.14 + install_script: + - sh -c "$(wget https://raw.githubusercontent.com/ararslan/CirrusCI.jl/master/bin/install.sh -q -O-)" +task: + name: Windows + windows_container: + image: cirrusci/windowsservercore + install_script: + - ps: iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/ararslan/CirrusCI.jl/master/bin/install.ps1')) +task: + name: macOS + macos_instance: + image: big-sur-xcode + install_script: + - sh -c "$(curl https://raw.githubusercontent.com/ararslan/CirrusCI.jl/master/bin/install.sh)" diff --git a/test/cirrusjl_install/.cirrus.star b/test/cirrusjl_install/.cirrus.star new file mode 100644 index 0000000..0f81c85 --- /dev/null +++ b/test/cirrusjl_install/.cirrus.star @@ -0,0 +1,13 @@ +load("../../lib.star", "cirrusjl_install") +load("github.com/cirrus-modules/helpers", "task", "windows_container", "freebsd_instance", + "macos_instance", "container", "arm_container") + +def _task(name, instance): + return task(name, instance, instructions=[cirrusjl_install()]) + +def main(ctx): + return [_task("FreeBSD", freebsd_instance("freebsd-13-0-release-amd64")), + _task("Linux AArch64", arm_container("ubuntu:latest")), + _task("Linux musl", container("alpine:3.14")), + _task("Windows", windows_container("cirrusci/windowsservercore")), + _task("macOS", macos_instance("big-sur-xcode"))] From 8452cf91831801d304390d6bdbad1098af48af86 Mon Sep 17 00:00:00 2001 From: Alex Arslan Date: Mon, 5 Sep 2022 15:58:14 -0700 Subject: [PATCH 3/5] Try inferring the OS from the instance specification --- lib.star | 32 +++++++++++++++++++++--------- test/cirrusjl_install/.cirrus.star | 3 ++- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/lib.star b/lib.star index 6601a7f..dc60481 100644 --- a/lib.star +++ b/lib.star @@ -1,25 +1,38 @@ load("cirrus", environ="env") load("github.com/cirrus-modules/helpers", "powershell", "script", "task") -def cirrusjl_install(): +def _os_from_instance(instance): + # Instances are `dict`s formatted as `{ type: descriptors }` where `type` is + # one of Cirrus' predefined execution environment names + if instance.get("container") or instance.get("arm_container"): + return "Linux" + elif instance.get("macos_instance"): + return "macOS" + elif instance.get("freebsd_instance"): + return "FreeBSD" + elif instance.get("windows_container"): + return "Windows" + else: + return "Unknown OS" + +def cirrusjl_install(os): base = "https://raw.githubusercontent.com/ararslan/CirrusCI.jl/master/bin" - os = environ["CIRRUS_OS"] - if os == "windows": + if os == "Windows": file = base + "/install.ps1" cmd = "iex ((New-Object System.Net.WebClient).DownloadString('%s'))" % file return powershell("install", cmd) file = base + "/install.sh" - if os == "darwin": + if os == "macOS": download = "curl " + file - elif os == "freebsd": + elif os == "FreeBSD": download = "fetch %s -o -" % file else: download = "wget %s -q -O-" % file cmd = "sh -c \"$(%s)\"" % download return script("install", cmd) -def julia_instructions(coverage=None): - steps = [cirrusjl_install(), +def julia_instructions(os, coverage=None): + steps = [cirrusjl_install(os), script("build", "cirrusjl build"), script("test", "cirrusjl test")] if coverage: @@ -28,10 +41,11 @@ def julia_instructions(coverage=None): def julia_tasks(versions, instances, env={}, coverage=None, allow_failures=None): tasks = [] - instructions = julia_instructions(coverage=coverage) for instance in instances: + os = _os_from_instance(instance) + instructions = julia_instructions(os, coverage=coverage) for version in versions: v = {"JULIA_VERSION": version}.update(env) - t = task(name="", instance=instance, instructions=instructions, env=v) + t = task(name=os, instance=instance, instructions=instructions, env=v) tasks.append(t) return tasks diff --git a/test/cirrusjl_install/.cirrus.star b/test/cirrusjl_install/.cirrus.star index 0f81c85..b9209d2 100644 --- a/test/cirrusjl_install/.cirrus.star +++ b/test/cirrusjl_install/.cirrus.star @@ -3,7 +3,8 @@ load("github.com/cirrus-modules/helpers", "task", "windows_container", "freebsd_ "macos_instance", "container", "arm_container") def _task(name, instance): - return task(name, instance, instructions=[cirrusjl_install()]) + os = name.split(" ")[0] + return task(name, instance, instructions=[cirrusjl_install(os)]) def main(ctx): return [_task("FreeBSD", freebsd_instance("freebsd-13-0-release-amd64")), From 580bd3c0d88c41a17778862474b2f374c7ee873b Mon Sep 17 00:00:00 2001 From: Alex Arslan Date: Mon, 5 Sep 2022 16:05:20 -0700 Subject: [PATCH 4/5] Fix tests...? --- test/cirrusjl_install/.cirrus.expected.yml | 6 +++++- test/cirrusjl_install/.cirrus.star | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/test/cirrusjl_install/.cirrus.expected.yml b/test/cirrusjl_install/.cirrus.expected.yml index 5bb1a82..8270934 100644 --- a/test/cirrusjl_install/.cirrus.expected.yml +++ b/test/cirrusjl_install/.cirrus.expected.yml @@ -1,19 +1,23 @@ task: name: FreeBSD freebsd_instance: - image: freebsd-13-0-release-amd64 + image_family: freebsd-13-0 install_script: - sh -c "$(fetch https://raw.githubusercontent.com/ararslan/CirrusCI.jl/master/bin/install.sh -o -)" task: name: Linux AArch64 arm_container: image: ubuntu:latest + cpu: 2 + memory: 4096 install_script: - sh -c "$(wget https://raw.githubusercontent.com/ararslan/CirrusCI.jl/master/bin/install.sh -q -O-)" task: name: Linux musl container: image: alpine:3.14 + cpu: 2 + memory: 4096 install_script: - sh -c "$(wget https://raw.githubusercontent.com/ararslan/CirrusCI.jl/master/bin/install.sh -q -O-)" task: diff --git a/test/cirrusjl_install/.cirrus.star b/test/cirrusjl_install/.cirrus.star index b9209d2..c21279d 100644 --- a/test/cirrusjl_install/.cirrus.star +++ b/test/cirrusjl_install/.cirrus.star @@ -7,7 +7,7 @@ def _task(name, instance): return task(name, instance, instructions=[cirrusjl_install(os)]) def main(ctx): - return [_task("FreeBSD", freebsd_instance("freebsd-13-0-release-amd64")), + return [_task("FreeBSD", freebsd_instance("freebsd-13-0")), _task("Linux AArch64", arm_container("ubuntu:latest")), _task("Linux musl", container("alpine:3.14")), _task("Windows", windows_container("cirrusci/windowsservercore")), From c6ee724927e54780bf01098c6888e22852ebb041 Mon Sep 17 00:00:00 2001 From: Alex Arslan Date: Mon, 5 Sep 2022 16:14:40 -0700 Subject: [PATCH 5/5] Test instructions --- test/julia_instructions/.cirrus.expected.yml | 22 ++++++++++++++++++++ test/julia_instructions/.cirrus.star | 8 +++++++ 2 files changed, 30 insertions(+) create mode 100644 test/julia_instructions/.cirrus.expected.yml create mode 100644 test/julia_instructions/.cirrus.star diff --git a/test/julia_instructions/.cirrus.expected.yml b/test/julia_instructions/.cirrus.expected.yml new file mode 100644 index 0000000..996455e --- /dev/null +++ b/test/julia_instructions/.cirrus.expected.yml @@ -0,0 +1,22 @@ +task: + name: No coverage + freebsd_instance: + image_family: freebsd-13-0 + install_script: + - sh -c "$(fetch https://raw.githubusercontent.com/ararslan/CirrusCI.jl/master/bin/install.sh -o -)" + build_script: + - cirrusjl build + test_script: + - cirrusjl test +task: + name: Codecov + freebsd_instance: + image_family: freebsd-13-0 + install_script: + - sh -c "$(fetch https://raw.githubusercontent.com/ararslan/CirrusCI.jl/master/bin/install.sh -o -)" + build_script: + - cirrusjl build + test_script: + - cirrusjl test + coverage_script: + - cirrusjl coverage codecov diff --git a/test/julia_instructions/.cirrus.star b/test/julia_instructions/.cirrus.star new file mode 100644 index 0000000..f171954 --- /dev/null +++ b/test/julia_instructions/.cirrus.star @@ -0,0 +1,8 @@ +load("../../lib.star", "julia_instructions") +load("github.com/cirrus-modules/helpers", "task", "freebsd_instance") + +def main(ctx): + return [task("No coverage", freebsd_instance("freebsd-13-0"), + instructions=julia_instructions("FreeBSD")), + task("Codecov", freebsd_instance("freebsd-13-0"), + instructions=julia_instructions("FreeBSD", coverage="codecov"))]