Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -106,12 +106,12 @@ RUN echo 'end: minimal'

FROM minimal AS final

ARG NODE=24.15.0
ARG NODE_SHA256=44836872d9aec49f1e6b52a9a922872db9a2b02d235a616a5681b6a85fec8d89
ARG NODE=v24.18.0
ARG NODE_SHA256=783130984963db7ba9cbd01089eaf2c2efb055c7c1693c943174b967b3050cb8
ENV PATH=/opt/node/bin:$PATH
RUN : \
&& echo 'lang: node' \
&& curl --silent --location --output /tmp/node.tar.gz "https://nodejs.org/dist/v${NODE}/node-v${NODE}-linux-x64.tar.gz" \
&& curl --silent --location --output /tmp/node.tar.gz "https://nodejs.org/dist/${NODE}/node-${NODE}-linux-x64.tar.gz" \
&& echo "${NODE_SHA256} /tmp/node.tar.gz" | sha256sum --check \
&& mkdir /opt/node \
&& tar --strip-components 1 --directory /opt/node -xf /tmp/node.tar.gz \
Expand Down
62 changes: 62 additions & 0 deletions bin/update
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#!/usr/bin/env python3
from __future__ import annotations

import argparse
import hashlib
import json
import os.path
import urllib.request

_HERE = os.path.join(os.path.dirname(__file__), '..')


def _replace_args(**kwargs: str) -> None:
fname = os.path.join(_HERE, 'Dockerfile')

with open(fname) as f:
lines = list(f)

for i, line in enumerate(lines):
if line.startswith('ARG '):
before, _, after = line.rstrip().partition('=')
varname = before.removeprefix('ARG ')
if varname in kwargs:
val = kwargs.pop(varname)
if after == val:
print(f'{varname}: up to date!')
else:
print(f'{varname}: {after} => {val}')
lines[i] = f'ARG {varname}={val}\n'

if kwargs:
raise AssertionError(f'unmatched: {sorted(kwargs)}')

with open(fname, 'w') as f:
f.writelines(lines)


def _update_node() -> int:
req = urllib.request.urlopen('https://nodejs.org/dist/index.json')
resp = json.load(req)

target = next(d for d in resp if d['lts'])
node = target['version']

url = f'https://nodejs.org/dist/{node}/node-{node}-linux-x64.tar.gz'
req = urllib.request.urlopen(url)
h = hashlib.file_digest(req, 'sha256')

_replace_args(NODE=node, NODE_SHA256=h.hexdigest())
return 0


def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument('target', choices=('node',))
args = parser.parse_args()

return {'node': _update_node}[args.target]()


if __name__ == '__main__':
raise SystemExit(main())
Loading