| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
1 |
#!/usr/bin/env python3 |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
2 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
3 |
"""Manage site and releases. |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
4 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
5 |
Usage: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
6 |
manage.py release [<branch>] |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
7 |
manage.py site |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
8 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
9 |
For the release command $FMT_TOKEN should contain a GitHub personal access token |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
10 |
obtained from https://github.com/settings/tokens. |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
11 |
""" |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
12 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
13 |
from __future__ import print_function |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
14 |
import datetime, docopt, errno, fileinput, json, os |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
15 |
import re, requests, shutil, sys |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
16 |
from contextlib import contextmanager |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
17 |
from subprocess import check_call |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
18 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
19 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
20 |
class Git: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
21 |
def __init__(self, dir): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
22 |
self.dir = dir |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
23 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
24 |
def call(self, method, args, **kwargs): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
25 |
return check_call(['git', method] + list(args), **kwargs) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
26 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
27 |
def add(self, *args): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
28 |
return self.call('add', args, cwd=self.dir) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
29 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
30 |
def checkout(self, *args): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
31 |
return self.call('checkout', args, cwd=self.dir) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
32 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
33 |
def clean(self, *args): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
34 |
return self.call('clean', args, cwd=self.dir) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
35 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
36 |
def clone(self, *args): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
37 |
return self.call('clone', list(args) + [self.dir]) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
38 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
39 |
def commit(self, *args): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
40 |
return self.call('commit', args, cwd=self.dir) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
41 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
42 |
def pull(self, *args): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
43 |
return self.call('pull', args, cwd=self.dir) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
44 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
45 |
def push(self, *args): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
46 |
return self.call('push', args, cwd=self.dir) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
47 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
48 |
def reset(self, *args): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
49 |
return self.call('reset', args, cwd=self.dir) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
50 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
51 |
def update(self, *args): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
52 |
clone = not os.path.exists(self.dir) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
53 |
if clone: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
54 |
self.clone(*args) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
55 |
return clone |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
56 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
57 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
58 |
def clean_checkout(repo, branch): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
59 |
repo.clean('-f', '-d') |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
60 |
repo.reset('--hard') |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
61 |
repo.checkout(branch) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
62 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
63 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
64 |
class Runner: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
65 |
def __init__(self, cwd): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
66 |
self.cwd = cwd |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
67 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
68 |
def __call__(self, *args, **kwargs): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
69 |
kwargs['cwd'] = kwargs.get('cwd', self.cwd) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
70 |
check_call(args, **kwargs) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
71 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
72 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
73 |
def create_build_env(): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
74 |
"""Create a build environment.""" |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
75 |
class Env: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
76 |
pass |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
77 |
env = Env() |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
78 |
env.fmt_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
79 |
env.build_dir = 'build' |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
80 |
env.fmt_repo = Git(os.path.join(env.build_dir, 'fmt')) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
81 |
return env |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
82 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
83 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
84 |
fmt_repo_url = 'git@github.com:fmtlib/fmt' |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
85 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
86 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
87 |
def update_site(env): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
88 |
env.fmt_repo.update(fmt_repo_url) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
89 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
90 |
doc_repo = Git(os.path.join(env.build_dir, 'fmt.dev')) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
91 |
doc_repo.update('git@github.com:fmtlib/fmt.dev') |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
92 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
93 |
version = '11.0.0' |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
94 |
clean_checkout(env.fmt_repo, version) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
95 |
target_doc_dir = os.path.join(env.fmt_repo.dir, 'doc') |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
96 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
97 |
# Build the docs. |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
98 |
html_dir = os.path.join(env.build_dir, 'html') |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
99 |
if os.path.exists(html_dir): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
100 |
shutil.rmtree(html_dir) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
101 |
include_dir = env.fmt_repo.dir |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
102 |
import build |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
103 |
build.build_docs(version, doc_dir=target_doc_dir, |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
104 |
include_dir=include_dir, work_dir=env.build_dir) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
105 |
shutil.rmtree(os.path.join(html_dir, '.doctrees')) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
106 |
# Copy docs to the website. |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
107 |
version_doc_dir = os.path.join(doc_repo.dir, version) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
108 |
try: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
109 |
shutil.rmtree(version_doc_dir) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
110 |
except OSError as e: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
111 |
if e.errno != errno.ENOENT: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
112 |
raise |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
113 |
shutil.move(html_dir, version_doc_dir) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
114 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
115 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
116 |
def release(args): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
117 |
env = create_build_env() |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
118 |
fmt_repo = env.fmt_repo |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
119 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
120 |
branch = args.get('<branch>') |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
121 |
if branch is None: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
122 |
branch = 'master' |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
123 |
if not fmt_repo.update('-b', branch, fmt_repo_url): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
124 |
clean_checkout(fmt_repo, branch) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
125 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
126 |
# Update the date in the changelog and extract the version and the first |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
127 |
# section content. |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
128 |
changelog = 'ChangeLog.md' |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
129 |
changelog_path = os.path.join(fmt_repo.dir, changelog) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
130 |
is_first_section = True |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
131 |
first_section = [] |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
132 |
for i, line in enumerate(fileinput.input(changelog_path, inplace=True)): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
133 |
if i == 0: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
134 |
version = re.match(r'# (.*) - TBD', line).group(1) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
135 |
line = '# {} - {}\n'.format( |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
136 |
version, datetime.date.today().isoformat()) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
137 |
elif not is_first_section: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
138 |
pass |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
139 |
elif line.startswith('#'): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
140 |
is_first_section = False |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
141 |
else: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
142 |
first_section.append(line) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
143 |
sys.stdout.write(line) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
144 |
if first_section[0] == '\n': |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
145 |
first_section.pop(0) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
146 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
147 |
ns_version = None |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
148 |
base_h_path = os.path.join(fmt_repo.dir, 'include', 'fmt', 'base.h') |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
149 |
for line in fileinput.input(base_h_path): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
150 |
m = re.match(r'\s*inline namespace v(.*) .*', line) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
151 |
if m: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
152 |
ns_version = m.group(1) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
153 |
break |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
154 |
major_version = version.split('.')[0] |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
155 |
if not ns_version or ns_version != major_version: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
156 |
raise Exception(f'Version mismatch {ns_version} != {major_version}') |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
157 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
158 |
# Workaround GitHub-flavored Markdown treating newlines as <br>. |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
159 |
changes = '' |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
160 |
code_block = False |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
161 |
stripped = False |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
162 |
for line in first_section: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
163 |
if re.match(r'^\s*```', line): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
164 |
code_block = not code_block |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
165 |
changes += line |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
166 |
stripped = False |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
167 |
continue |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
168 |
if code_block: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
169 |
changes += line |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
170 |
continue |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
171 |
if line == '\n' or re.match(r'^\s*\|.*', line): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
172 |
if stripped: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
173 |
changes += '\n' |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
174 |
stripped = False |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
175 |
changes += line |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
176 |
continue |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
177 |
if stripped: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
178 |
line = ' ' + line.lstrip() |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
179 |
changes += line.rstrip() |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
180 |
stripped = True |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
181 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
182 |
fmt_repo.checkout('-B', 'release') |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
183 |
fmt_repo.add(changelog) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
184 |
fmt_repo.commit('-m', 'Update version') |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
185 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
186 |
# Build the docs and package. |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
187 |
run = Runner(fmt_repo.dir) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
188 |
run('cmake', '.') |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
189 |
run('make', 'doc', 'package_source') |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
190 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
191 |
# Create a release on GitHub. |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
192 |
fmt_repo.push('origin', 'release') |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
193 |
auth_headers = {'Authorization': 'token ' + os.getenv('FMT_TOKEN')} |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
194 |
r = requests.post('https://api.github.com/repos/fmtlib/fmt/releases', |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
195 |
headers=auth_headers, |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
196 |
data=json.dumps({'tag_name': version, |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
197 |
'target_commitish': 'release', |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
198 |
'body': changes, 'draft': True})) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
199 |
if r.status_code != 201: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
200 |
raise Exception('Failed to create a release ' + str(r)) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
201 |
id = r.json()['id'] |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
202 |
uploads_url = 'https://uploads.github.com/repos/fmtlib/fmt/releases' |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
203 |
package = 'fmt-{}.zip'.format(version) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
204 |
r = requests.post( |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
205 |
'{}/{}/assets?name={}'.format(uploads_url, id, package), |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
206 |
headers={'Content-Type': 'application/zip'} | auth_headers, |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
207 |
data=open('build/fmt/' + package, 'rb')) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
208 |
if r.status_code != 201: |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
209 |
raise Exception('Failed to upload an asset ' + str(r)) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
210 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
211 |
update_site(env) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
212 |
|
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
213 |
if __name__ == '__main__': |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
214 |
args = docopt.docopt(__doc__) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
215 |
if args.get('release'): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
216 |
release(args) |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
217 |
elif args.get('site'): |
| 47fd5c32 |
Poul Sander |
2024-10-05 08:44 |
218 |
update_site(create_build_env()) |
|
|
1970-01-01 00:00 |
219 |
|