Skip to content

Commit ac77ee4

Browse files
committed
Remove ansible from macOS CI
1 parent 32bf3fe commit ac77ee4

File tree

8 files changed

+198
-86
lines changed

8 files changed

+198
-86
lines changed

.github/workflows/ci-macos.yml

+27-24
Original file line numberDiff line numberDiff line change
@@ -5,49 +5,52 @@ env:
55
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
66

77
on:
8-
pull_request:
98
push:
109
branches: ["main"]
1110
tags: ["**"]
11+
pull_request:
12+
branches: ["main"]
1213

1314
jobs:
1415
macos:
1516
name: LLVM ${{ matrix.LLVM_VERSION }}
1617
runs-on: macos-latest
1718
strategy:
1819
matrix:
19-
LLVM_VERSION: [13, 14, 15, 16, 17, 18]
20-
20+
include:
21+
- OS_NAME: "macos"
22+
LLVM_VERSION: 13
23+
- OS_NAME: "macos"
24+
LLVM_VERSION: 14
25+
- OS_NAME: "macos"
26+
LLVM_VERSION: 15
27+
- OS_NAME: "macos"
28+
LLVM_VERSION: 16
29+
- OS_NAME: "macos"
30+
LLVM_VERSION: 17
31+
- OS_NAME: "macos"
32+
LLVM_VERSION: 18
2133
steps:
22-
- name: Debugging
23-
run: |
24-
env | sort
25-
cat $GITHUB_EVENT_PATH
26-
2734
- name: Fix git
2835
run: |
2936
git config --global --add safe.directory $PWD
30-
31-
- name: Checkout sources
32-
uses: actions/checkout@v3
37+
- uses: actions/checkout@v4
3338
with:
3439
submodules: true
35-
3640
- uses: ./actions/detect-package-metadata
3741
id: metadata
3842

3943
- name: Run CI task
4044
run: |
41-
brew install ansible
42-
cd infrastructure && \
43-
ansible-playbook macos-playbook.yaml \
44-
-e llvm_version="${{ matrix.LLVM_VERSION }}" \
45-
-e source_dir=$PWD/.. \
46-
-e gitref=$GITHUB_SHA \
47-
-e host=localhost \
48-
-e SDKROOT=`xcrun -show-sdk-path` \
49-
-e mull_version=${{ steps.metadata.outputs.version }}${{ steps.metadata.outputs.suffix }} \
50-
--verbose
45+
brew install zlib ncurses sqlite ninja llvm@${{ matrix.LLVM_VERSION }}
46+
pip3 install -r requirements.txt --break-system-packages
47+
./infrastructure/generator.py cmake --os macos --llvm_version ${{ matrix.LLVM_VERSION }}
48+
cmake --preset mull -DMULL_VERSION=${{ steps.metadata.outputs.version }}${{ steps.metadata.outputs.suffix }}
49+
cmake --workflow --preset build-and-test
50+
cmake --workflow --preset package
51+
./end2end-tests/setup_end2end_tests.sh
52+
./end2end-tests/run_end2end_tests.sh macos ${{ matrix.LLVM_VERSION }}
53+
mull-runner-${{ matrix.LLVM_VERSION }} --version
5154
5255
- name: Publish package
5356
if: env.CLOUDSMITH_API_KEY != null
@@ -57,12 +60,12 @@ jobs:
5760
--version ${{ steps.metadata.outputs.version }}${{ steps.metadata.outputs.suffix }} \
5861
mull-project/mull-${{ steps.metadata.outputs.channel }} \
5962
--tags macos \
60-
infrastructure/packages/`cat infrastructure/PACKAGE_FILE_NAME`.zip
63+
build.${{ matrix.OS_NAME }}.${{ matrix.LLVM_VERSION }}.dir/*.zip
6164
6265
- name: Move package
6366
run: |
6467
mkdir -p /tmp/packages
65-
mv infrastructure/packages/`cat infrastructure/PACKAGE_FILE_NAME`.zip /tmp/packages/`cat infrastructure/PACKAGE_FILE_NAME`.zip
68+
mv build.${{ matrix.OS_NAME }}.${{ matrix.LLVM_VERSION }}.dir/*.zip /tmp/packages/
6669
6770
- uses: ./actions/attach-package
6871
with:

.github/workflows/ci-ubuntu.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ jobs:
6363
cmake --preset mull -DMULL_VERSION=${{ steps.metadata.outputs.version }}${{ steps.metadata.outputs.suffix }}
6464
cmake --workflow --preset build-and-test
6565
cmake --workflow --preset package
66-
./end2end-tests/run_end2end_tests.sh ${{ matrix.LLVM_VERSION }}
66+
./end2end-tests/run_end2end_tests.sh ${{ matrix.OS_NAME }} ${{ matrix.LLVM_VERSION }}
6767
mull-runner-${{ matrix.LLVM_VERSION }} --version
6868
6969
- name: Publish package
@@ -77,12 +77,12 @@ jobs:
7777
UBUNTU_CODENAME=$(. /etc/os-release; echo "${UBUNTU_CODENAME/*, /}")
7878
env CLOUDSMITH_API_KEY=${{ secrets.CLOUDSMITH_API_KEY }} cloudsmith push deb \
7979
mull-project/mull-${{ steps.metadata.outputs.channel }}/${{ matrix.OS_NAME }}/${UBUNTU_CODENAME} \
80-
build.${{ matrix.LLVM_VERSION }}.dir/*.deb
80+
build.${{ matrix.OS_NAME }}.${{ matrix.LLVM_VERSION }}.dir/*.deb
8181
8282
- name: Move package
8383
run: |
8484
mkdir -p /tmp/packages
85-
sudo mv build.${{ matrix.LLVM_VERSION }}.dir/*.deb /tmp/packages/
85+
sudo mv build.${{ matrix.OS_NAME }}.${{ matrix.LLVM_VERSION }}.dir/*.deb /tmp/packages/
8686
8787
- uses: ./actions/attach-package
8888
with:

end2end-tests/run_end2end_tests.sh

+29-9
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,30 @@
1-
#!/usr/bin/bash
1+
#!/bin/bash
22

33
set -e
44
set -x
55

6-
LLVM_VERSION=$1
6+
OS_NAME=$1
7+
LLVM_VERSION=$2
8+
BUILD_DIR=build.$OS_NAME.$LLVM_VERSION.dir
79

810
if (( $LLVM_VERSION < 16 )); then
911
EXTRA_FLAGS=-fexperimental-new-pass-manager
1012
fi
1113

12-
# Install mull system-wide
13-
dpkg -i build.${LLVM_VERSION}.dir/*.deb
14+
if [ "$OS_NAME" == "macos" ]
15+
then
16+
sudo cmake --install $BUILD_DIR
17+
PLUGIN_PATH=/usr/local/lib/mull-ir-frontend-$LLVM_VERSION
18+
MULL_CC=/opt/homebrew/opt/llvm@$LLVM_VERSION/bin/clang
19+
MULL_CXX=/opt/homebrew/opt/llvm@$LLVM_VERSION/bin/clang++
20+
else
21+
dpkg -i $BUILD_DIR/*.deb
22+
PLUGIN_PATH=/usr/lib/mull-ir-frontend-$LLVM_VERSION
23+
MULL_CC=clang-$LLVM_VERSION
24+
MULL_CXX=clang++-$LLVM_VERSION
25+
fi
26+
27+
which mull-runner-$LLVM_VERSION
1428

1529
pushd `dirname "$0"`
1630

@@ -23,10 +37,10 @@ function test_fmt() {
2337
pushd fmt.build.dir
2438

2539
cmake -G Ninja \
26-
-DCMAKE_CXX_FLAGS="-grecord-command-line -fpass-plugin=/usr/lib/mull-ir-frontend-$LLVM_VERSION $EXTRA_FLAGS" \
40+
-DCMAKE_CXX_FLAGS="-grecord-command-line -fpass-plugin=$PLUGIN_PATH $EXTRA_FLAGS" \
2741
-DCMAKE_BUILD_TYPE=Debug \
28-
-DCMAKE_C_COMPILER=clang-$LLVM_VERSION \
29-
-DCMAKE_CXX_COMPILER=clang++-$LLVM_VERSION \
42+
-DCMAKE_C_COMPILER=$MULL_CC \
43+
-DCMAKE_CXX_COMPILER=$MULL_CXX \
3044
..
3145

3246
ninja core-test
@@ -42,13 +56,19 @@ function test_fmt() {
4256
function test_openssl() {
4357
pushd openssl
4458

45-
env CC=clang-$LLVM_VERSION ./config -g -O0 \
59+
env CC=$MULL_CC ./config -g -O0 \
4660
$EXTRA_FLAGS \
4761
-grecord-command-line \
48-
-fpass-plugin=/usr/lib/mull-ir-frontend-$LLVM_VERSION
62+
-fpass-plugin=$PLUGIN_PATH
4963

5064
make build_generated -j
5165
make ./test/bio_enc_test -j
66+
67+
if [ "$OS_NAME" == "macos" ]
68+
then
69+
install_name_tool -change /usr/local/lib/libcrypto.3.dylib $PWD/libcrypto.3.dylib ./test/bio_enc_test
70+
fi
71+
5272
env LD_LIBRARY_PATH=. ./test/bio_enc_test
5373
env LD_LIBRARY_PATH=. mull-runner-$LLVM_VERSION --allow-surviving ./test/bio_enc_test
5474

end2end-tests/setup_end2end_tests.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/usr/bin/bash
1+
#!/bin/bash
22

33
set -e
44
set -x

infrastructure/generator.py

+67-42
Original file line numberDiff line numberDiff line change
@@ -6,38 +6,56 @@
66
import shutil
77

88
SUPPORTED_PLATFORMS = {
9-
"ubuntu": {
10-
"20.04": [12],
11-
"22.04": [13, 14, 15],
12-
"24.04": [14, 15, 16, 17, 18]
13-
}
9+
"ubuntu": {"20.04": [12], "22.04": [13, 14, 15], "24.04": [14, 15, 16, 17, 18]},
10+
"macos": {"latest": [13, 14, 15, 16, 17, 18]},
1411
}
1512

1613

1714
def cmake(args):
18-
template_name = f"infrastructure/templates/cmake-presets/{args.os}.mustache"
19-
template_args = {"LLVM_VERSION": args.llvm_version}
15+
os_specific_args = {
16+
"ubuntu": {
17+
"CC": f"clang-{args.llvm_version}",
18+
"CXX": f"clang++-{args.llvm_version}",
19+
"CMAKE_PREFIX_PATH": f"/usr/lib/llvm-{args.llvm_version}/cmake/;/usr/lib/cmake/clang-{args.llvm_version}/",
20+
},
21+
"macos": {
22+
"CC": f"/opt/homebrew/opt/llvm@{args.llvm_version}/bin/clang",
23+
"CXX": f"/opt/homebrew/opt/llvm@{args.llvm_version}/bin/clang++",
24+
"CMAKE_PREFIX_PATH": f"/opt/homebrew/opt/llvm@{args.llvm_version}/lib/cmake/llvm/;/opt/homebrew/opt/llvm@{args.llvm_version}/lib/cmake/clang/",
25+
},
26+
}
27+
template_name = f"infrastructure/templates/cmake-presets/CMakePresets.json.mustache"
28+
template_args = os_specific_args[args.os]
29+
template_args["LLVM_VERSION"] = args.llvm_version
30+
template_args["OS_NAME"] = args.os
2031
renderer = pystache.Renderer(missing_tags="strict")
2132
with open(template_name, "r") as t:
2233
result = renderer.render(t.read(), template_args)
23-
with open('CMakePresets.json', "w") as f:
34+
with open("CMakePresets.json", "w") as f:
2435
f.write(result)
2536

2637

2738
def devcontainers(args):
2839
shutil.rmtree(".devcontainer")
29-
for (os_name, platform) in SUPPORTED_PLATFORMS.items():
40+
for os_name, platform in SUPPORTED_PLATFORMS.items():
41+
if os_name.lower() == "macos":
42+
continue
3043
template_folder = f"infrastructure/templates/devcontainers/{os_name}"
31-
for (os_version, llvm_versions) in platform.items():
44+
for os_version, llvm_versions in platform.items():
3245
for llvm_version in llvm_versions:
33-
container_folder = f".devcontainer/{os_name}_{os_version}_{llvm_version}"
46+
container_folder = (
47+
f".devcontainer/{os_name}_{os_version}_{llvm_version}"
48+
)
3449
os.makedirs(container_folder, exist_ok=True)
3550

36-
template_args = {"LLVM_VERSION": llvm_version,
37-
"OS_NAME": os_name, "OS_VERSION": os_version}
51+
template_args = {
52+
"LLVM_VERSION": llvm_version,
53+
"OS_NAME": os_name,
54+
"OS_VERSION": os_version,
55+
}
3856

3957
renderer = pystache.Renderer(missing_tags="strict")
40-
for template in ['devcontainer.json', "Dockerfile"]:
58+
for template in ["devcontainer.json", "Dockerfile"]:
4159
template_name = f"{template_folder}/{template}.mustache"
4260
result_filename = f"{container_folder}/{template}"
4361
with open(template_name, "r") as t:
@@ -50,41 +68,48 @@ def gh_workflows(args):
5068
template_folder = f"infrastructure/templates/github-actions/"
5169
workflow_folder = f".github/workflows/"
5270

53-
strategies = []
54-
for os_version in sorted(SUPPORTED_PLATFORMS["ubuntu"].keys()):
55-
for llvm_version in SUPPORTED_PLATFORMS["ubuntu"][os_version]:
56-
arg = {"OS_NAME": "ubuntu", "OS_VERSION": os_version,
57-
"LLVM_VERSION": llvm_version}
58-
strategies.append(arg)
59-
60-
template_args = {"strategy": strategies, "OS_NAME": "Ubuntu"}
61-
renderer = pystache.Renderer(missing_tags="strict")
62-
for template in ['ci-ubuntu.yml']:
63-
template_name = f"{template_folder}/{template}.mustache"
64-
result_filename = f"{workflow_folder}/{template}"
65-
with open(template_name, "r") as t:
66-
result = renderer.render(t.read(), template_args)
67-
with open(result_filename, "w") as f:
68-
f.write(result)
71+
for os_name in SUPPORTED_PLATFORMS.keys():
72+
strategies = []
73+
for os_version in sorted(SUPPORTED_PLATFORMS[os_name].keys()):
74+
for llvm_version in SUPPORTED_PLATFORMS[os_name][os_version]:
75+
arg = {
76+
"OS_NAME": os_name,
77+
"OS_VERSION": os_version,
78+
"LLVM_VERSION": llvm_version,
79+
}
80+
strategies.append(arg)
81+
82+
template_args = {"strategy": strategies, "OS_NAME": os_name.capitalize()}
83+
renderer = pystache.Renderer(missing_tags="strict")
84+
for template in [f"ci-{os_name}.yml"]:
85+
template_name = f"{template_folder}/{template}.mustache"
86+
result_filename = f"{workflow_folder}/{template}"
87+
with open(template_name, "r") as t:
88+
result = renderer.render(t.read(), template_args)
89+
with open(result_filename, "w") as f:
90+
f.write(result)
6991

7092

7193
def main():
7294
parser = argparse.ArgumentParser(
73-
prog='generator', description='Generates various infra files for Mull')
95+
prog="generator", description="Generates various infra files for Mull"
96+
)
7497
subparsers = parser.add_subparsers(
75-
title='subcommands', help='available subcommands', dest="cmd")
76-
77-
parser_cmake = subparsers.add_parser(
78-
'cmake', help='Generates CMake preset file')
79-
parser_cmake.add_argument('--os', choices=('ubuntu',),
80-
help='Select OS for which to generate preset', type=str)
98+
title="subcommands", help="available subcommands", dest="cmd"
99+
)
100+
101+
parser_cmake = subparsers.add_parser("cmake", help="Generates CMake preset file")
102+
parser_cmake.add_argument(
103+
"--os",
104+
choices=("ubuntu", "macos"),
105+
help="Select OS for which to generate preset",
106+
type=str,
107+
)
81108
parser_cmake.add_argument("--llvm_version", type=int)
82109

83-
subparsers.add_parser('devcontainers', help='Generates devcontainer files')
84-
subparsers.add_parser('github_workflows',
85-
help='Generates GitHub workflow files')
86-
subparsers.add_parser('all',
87-
help='Combines devcontainers and github_workflows')
110+
subparsers.add_parser("devcontainers", help="Generates devcontainer files")
111+
subparsers.add_parser("github_workflows", help="Generates GitHub workflow files")
112+
subparsers.add_parser("all", help="Combines devcontainers and github_workflows")
88113

89114
args = parser.parse_args()
90115
if args.cmd == "cmake":

infrastructure/templates/cmake-presets/ubuntu.mustache renamed to infrastructure/templates/cmake-presets/CMakePresets.json.mustache

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
{
55
"name": "mull",
66
"generator": "Ninja",
7-
"binaryDir": "${sourceDir}/build.{{{LLVM_VERSION}}}.dir",
7+
"binaryDir": "${sourceDir}/build.{{OS_NAME}}.{{{LLVM_VERSION}}}.dir",
88
"cacheVariables": {
99
"CMAKE_BUILD_TYPE": "Release",
10-
"CMAKE_C_COMPILER": "clang-{{LLVM_VERSION}}",
11-
"CMAKE_CXX_COMPILER": "clang++-{{LLVM_VERSION}}",
12-
"CMAKE_PREFIX_PATH": "/usr/lib/llvm-{{LLVM_VERSION}}/cmake/;/usr/lib/cmake/clang-{{LLVM_VERSION}}/"
10+
"CMAKE_C_COMPILER": "{{CC}}",
11+
"CMAKE_CXX_COMPILER": "{{CXX}}",
12+
"CMAKE_PREFIX_PATH": "{{CMAKE_PREFIX_PATH}}"
1313
}
1414
}
1515
],

0 commit comments

Comments
 (0)