Skip to content

Commit 073dd4c

Browse files
committed
[GR-71934] Update github workflows and devcontainer
PullRequest: graalpython/4201
2 parents 2e48f6e + e180dda commit 073dd4c

File tree

16 files changed

+189
-234
lines changed

16 files changed

+189
-234
lines changed

.devcontainer/Dockerfile

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
FROM mcr.microsoft.com/devcontainers/universal:linux
2+
3+
# Prepare the build dependencies
4+
RUN apt-get install -y libffi-dev zlib1g-dev libbz2-dev && \
5+
pip install cmake && \
6+
mkdir -p /opt && \
7+
git clone https://github.com/graalvm/mx /opt/mx && \
8+
MX_CACHE_DIR=/opt/mxcache /opt/mx/mx -p /opt/mx -y fetch-jdk -A --to /opt --jdk-id labsjdk-ce-latest && \
9+
rm -rf /opt/mxcache && \
10+
chmod -R a+w /opt/mx && \
11+
echo JAVA_HOME=/opt/labsjdk-ce-latest > /opt/mx/env && \
12+
echo MX_GLOBAL_ENV="/opt/mx/env" >> /etc/profile && \
13+
echo MX_CACHE_DIR="/opt/mx/cache" >> /etc/profile && \
14+
echo PATH="/opt/mx:/opt/labsjdk-ce-latest/bin/:\$PATH" >> /etc/profile

.devcontainer/devcontainer.json

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"name": "GraalPy",
3+
"build": { "dockerfile": "Dockerfile" },
4+
"postCreateCommand": {
5+
"vscodeinit": "sudo chmod a+rwx ../ && mx -y sforceimports && mx -y vscodeinit && ln -sf $PWD/../graalpython.code-workspace graalpython.code-workspace && mx -y build --target GRAALPY_JVM_STANDALONE"
6+
},
7+
"hostRequirements": {
8+
"cpus": 2,
9+
"memory": "16gb",
10+
"storage": "64gb"
11+
},
12+
"customizations": {
13+
"vscode": {
14+
"extensions": [
15+
"vscjava.vscode-java-pack",
16+
"zoma.vscode-auto-open-workspace"
17+
],
18+
"settings": {
19+
"autoOpenWorkspace.enableAutoOpenIfSingleWorkspace": true,
20+
"java.autobuild.enabled": false
21+
}
22+
},
23+
"codespaces": {
24+
"openFiles": [
25+
"docs/contributor/CONTRIBUTING.md"
26+
]
27+
}
28+
}
29+
}

.github/scripts/extract_matrix.py

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@
7171
)
7272

7373
DOWNLOADS_LINKS = {
74-
"GRADLE_JAVA_HOME": "https://download.oracle.com/java/{major_version}/latest/jdk-{major_version}_{os}-{arch_short}_bin{ext}"
74+
"GRADLE_JAVA_HOME": "https://download.oracle.com/java/{major_version}/latest/jdk-{major_version}_{os}-{arch_short}_bin{ext}",
75+
"ECLIPSE": "https://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops4/R-4.26-202211231800/eclipse-SDK-4.26-linux-gtk-x86_64.tar.gz"
7576
}
7677

7778
# Gitlab Runners OSS
@@ -82,12 +83,25 @@
8283
"windows-latest": ["windows", "amd64"]
8384
}
8485

85-
# Override unavailable Python versions for some OS/Arch combinations
86+
# Override unavailable Python versions for some OS/Arch / job name combinations
8687
PYTHON_VERSIONS = {
8788
"ubuntu-24.04-arm": "3.12.8",
89+
"ubuntu-latest": "3.12.8",
90+
"style-gate": "3.8.12",
91+
"style-ecj-gate": "3.8.12",
92+
}
93+
94+
EXCLUDED_SYSTEM_PACKAGES = {
95+
"devkit",
96+
"msvc_source",
8897
}
8998

9099

100+
PYTHON_PACKAGES_VERSIONS = {
101+
"pylint": "==2.4",
102+
"astroid": "==2.4"
103+
}
104+
91105
@dataclass
92106
class Artifact:
93107
name: str
@@ -148,8 +162,10 @@ def python_version(self) -> str | None:
148162
if "MX_PYTHON_VERSION" in self.env:
149163
del self.env["MX_PYTHON_VERSION"]
150164

151-
if self.runs_on in PYTHON_VERSIONS:
152-
python_version = PYTHON_VERSIONS[self.runs_on]
165+
for key, version in PYTHON_VERSIONS.items():
166+
if self.runs_on == key or key in self.name:
167+
python_version = version
168+
153169
return python_version
154170

155171
@cached_property
@@ -163,16 +179,20 @@ def system_packages(self) -> list[str]:
163179
continue
164180
elif k.startswith("00:") or k.startswith("01:"):
165181
k = k[3:]
182+
if any(excluded in k for excluded in EXCLUDED_SYSTEM_PACKAGES):
183+
continue
166184
system_packages.append(f"'{k}'" if self.runs_on != "windows-latest" else f"{k}")
167185
return system_packages
168186

169187
@cached_property
170188
def python_packages(self) -> list[str]:
171-
python_packages = []
189+
python_packages = [f"{key}{value}" for key, value in PYTHON_PACKAGES_VERSIONS.items()]
172190
for k, v in self.job.get("packages", {}).items():
173191
if k.startswith("pip:"):
174-
python_packages.append(f"'{k[4:]}{v}'" if self.runs_on != "windows-latest" else f"{k[4:]}{v}")
175-
return python_packages
192+
key = k[4:]
193+
if key in PYTHON_PACKAGES_VERSIONS: continue
194+
python_packages.append(f"{key}{v}")
195+
return [f"'{pkg}'" if self.runs_on != "windows-latest" else f"{pkg}" for pkg in python_packages]
176196

177197
def get_download_steps(self, key: str, version: str) -> str:
178198
download_link = self.get_download_link(key, version)
@@ -186,7 +206,7 @@ def get_download_steps(self, key: str, version: str) -> str:
186206
Add-Content $env:GITHUB_ENV "{key}=$(Resolve-Path $dirname)"
187207
""")
188208

189-
return (f"wget -q {download_link} && "
209+
return (f"wget -q '{download_link}' -O {filename} && "
190210
f"dirname=$(tar -tzf {filename} | head -1 | cut -f1 -d '/') && "
191211
f"tar -xzf {filename} && "
192212
f'echo {key}=$(realpath "$dirname") >> $GITHUB_ENV')
@@ -201,7 +221,7 @@ def get_download_link(self, key: str, version: str) -> str:
201221

202222
vars = {
203223
"major_version": major_version,
204-
"os":os,
224+
"os": os,
205225
"arch": arch,
206226
"arch_short": arch_short,
207227
"ext": extension,
@@ -261,6 +281,15 @@ def download_artifact(self) -> Artifact | None:
261281
return Artifact(pattern, os.path.normpath(artifacts[0].get("dir", ".")))
262282
return None
263283

284+
@staticmethod
285+
def safe_join(args: list[str]) -> str:
286+
safe_args = []
287+
for s in args:
288+
if s.startswith("$(") and s.endswith(")"):
289+
safe_args.append(s)
290+
else:
291+
safe_args.append(shlex.quote(s))
292+
return " ".join(safe_args)
264293

265294
@staticmethod
266295
def flatten_command(args: list[str | list[str]]) -> list[str]:
@@ -269,18 +298,19 @@ def flatten_command(args: list[str | list[str]]) -> list[str]:
269298
if isinstance(s, list):
270299
flattened_args.append(f"$( {shlex.join(s)} )")
271300
else:
272-
flattened_args.append(s)
301+
out = re.sub(r"\$\{([A-Z0-9_]+)\}", r"$\1", s).replace("'", "")
302+
flattened_args.append(out)
273303
return flattened_args
274304

275305
@cached_property
276306
def setup(self) -> str:
277307
cmds = [self.flatten_command(step) for step in self.job.get("setup", [])]
278-
return "\n".join(shlex.join(s) for s in cmds)
308+
return "\n".join(self.safe_join(s) for s in cmds)
279309

280310
@cached_property
281311
def run(self) -> str:
282312
cmds = [self.flatten_command(step) for step in self.job.get("run", [])]
283-
return "\n".join(shlex.join(s) for s in cmds)
313+
return "\n".join(self.safe_join(s) for s in cmds)
284314

285315
@cached_property
286316
def logs(self) -> str:
@@ -295,6 +325,7 @@ def to_dict(self):
295325
"name": self.name,
296326
"mx_version": self.mx_version,
297327
"os": self.runs_on,
328+
"fetch_depth": 0 if "--tags style" in self.run else 1,
298329
"python_version": self.python_version,
299330
"setup_steps": self.setup,
300331
"run_steps": self.run,
@@ -304,7 +335,7 @@ def to_dict(self):
304335
"require_artifact": [self.download_artifact.name, self.download_artifact.pattern] if self.download_artifact else None,
305336
"logs": self.logs.replace("../", "${{ env.PARENT_DIRECTORY }}/"),
306337
"env": self.env,
307-
"downloads_steps": " ".join(self.downloads),
338+
"downloads_steps": "\n".join(self.downloads),
308339
}
309340

310341
def __str__(self):

.github/workflows/build-linux-aarch64-wheels.yml

Lines changed: 0 additions & 45 deletions
This file was deleted.

.github/workflows/build-linux-amd64-wheels.yml

Lines changed: 0 additions & 43 deletions
This file was deleted.

.github/workflows/build-macos-aarch64-wheels.yml

Lines changed: 0 additions & 37 deletions
This file was deleted.

.github/workflows/build-macos-amd64-wheels.yml

Lines changed: 0 additions & 37 deletions
This file was deleted.

0 commit comments

Comments
 (0)