-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathindex.html
More file actions
289 lines (265 loc) · 13.9 KB
/
index.html
File metadata and controls
289 lines (265 loc) · 13.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Atomist Clone</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link href="https://fonts.googleapis.com/css?family=Lato:300,400|Open+Sans:300,400" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="slick/slick.css"/>
<link rel="stylesheet" type="text/css" href="slick/slick-theme.css"/>
<link rel="stylesheet" type="text/css" href="styles/main.css">
</head>
<body>
<!-- 1_ Nav+Header start -->
<header>
<nav>
<a id="logo" href="#">
<img height="55px" src="images/Atomist-Logo-White-Horiz.png" alt="Atomist logo">
</a>
<div>
<a href="#" id="hamburger-icon">☰</a>
<ul id="topnav">
<li><a href="#">PRODUCT</a></li>
<li><a href="#">PRICING</a></li>
<li><a href="#">DOCS</a></li>
<li><a href="#">BLOG</a></li>
<li class="compact-menu"><a href="#">SIGN IN</a></li>
<li class="compact-menu"><a href="#">GET STARTED</a></li>
</ul>
</div>
<div id="button-holder">
<button id="cta-button-outline">GET STARTED</button>
<img alt="Add to Slack" src="https://platform.slack-edge.com/img/add_to_slack.png" srcset="https://platform.slack-edge.com/img/add_to_slack.png 1x, https://platform.slack-edge.com/img/add_to_slack@2x.png 2x" width="140" height="40">
<button id="sign-in-button">SIGN IN</button>
</div>
</nav>
</header>
<!-- 1_ Nav+Header end -->
<!-- 2_title+CTA start -->
<section id="cta">
<div>
<h1>Development Automation</h1>
<span>Create, Ship, and continuously Improve your software</span>
<div class="cta-button">
<button>GET STARTED</button>
</div>
</div>
</section>
<!-- 2_title+CTA end -->
<!-- 3_Features start -->
<section id="features">
<div id="row">
<div class="feature-column-container">
<div class="feature-column">
<img id="create" src="images/atomist-create-icon.png" alt="Create">
<h2>CREATE</h2>
<div class="feature-description">
Starting a new project should be a joy, not a drag. Make project creation one of your super powers.
</div>
<ul>
<li><span>Create everything you need for your project in one go</span></li>
<li><span>Turn any repo into a software factory</span></li>
<li><span>Configure your development flow</span></li>
<li><span>Get actionable notifications for your projects in chat</span></li>
<li><span>See project information on the Atomist web dashboard</span></li>
</ul>
</div>
<div class="feature-column">
<img id="ship" src="images/atomist-ship-icon.png" alt="Ship">
<h2>SHIP</h2>
<div class="feature-description">
Take the friction out of your shipping. Automate tedious tasks, get the right notifications to the right people.
</div>
<ul>
<li><span>Automate custom project checks and reviews</span></li>
<li><span>Streamline code review. Never wait for merges on all green again</span></li>
<li><span>Compose and evolve flexible development flows based on events, not static pipeline definitions</span></li>
<li><span>Release with the convenience of a button in Slack</span></li>
</ul>
</div>
<div class="feature-column">
<img id="improve" src="images/atomist-improve-icon.png" alt="Improve">
<h2>IMPROVE</h2>
<div class="feature-description">
Nothing says tedium like updates. Let us help. Less key mashing, and back to coding faster. Update 100 projects as easily as one.
</div>
<ul>
<li><span>Roll out new version of frameworks across all projects</span></li>
<li><span>Update dependencies across all projects</span></li>
<li><span>Automate code-level change across your projects, whether it’s a big renaming, or squashing a bug across your code base</span></li>
</ul>
</div>
</div>
</div>
<div class="cta-button">
<button>GET STARTED</button>
</div>
</section>
<!-- 3_Features end -->
<!-- 4_Carousel start -->
<section id="featured-image">
<img src="images/Atomist-Dashboard-Screenshot.png" alt="Atomist Dashboard Screenshot">
</section>
<section id="carousel">
<div class="slider" id="quotes">
<div class="quote slick-slide">
<div class="content">Ensuring consistent provisioning and management of applications and infrastructure for a growing platform can be challenging. Atomist allows us to focus on what matters, writing valuable time saving automations that allow developers end to end visibility and control.
</div>
<div class="author">– Donovan Muller, Lead Technical Partner, Barclays Africa</div>
</div>
<div class="quote slick-slide">
<div class="content">Atomist has improved our globe-spanning team's daily workflow. It gives us a single interface to both monitor the change introduced by development as well a way to manage contributions from our community.
</div>
<div class="author">– Ben Hale, Pivotal, Cloud Foundry</div>
</div>
<div class="quote slick-slide">
<div class="content">Atomist has become a critical part (and member!) of our dev team. Allowing us to efficiently manage and monitor our development process.
</div>
<div class="author">– Brian Conneen, Chief Technology Officer, Marlette Funding</div>
</div>
<div class="quote slick-slide">
<div class="content">Atomist allows us to focus on improving our products instead of custom developer tools by making automation easy with actionable information available to all team members.
</div>
<div class="author">– Tapani Moilanen, Chief Architect, Kyyti</div>
</div>
<div class="quote slick-slide">
<div class="content">We are excited to use Atomist in our team. The bridge it forms between multiple tools is an incredible asset that will allow us to speed up development and have happier developers in the meantime.
</div>
<div class="author">– Emma Wilson, nVidia</div>
</div>
</div>
</section>
<!-- 4_Carousel end -->
<!-- 5_tab_demo start -->
<section id="tabs">
<h2>Simple, powerful, open source automation API</h2>
<p class="subtitle">Automate your development process, increase visibility.</p>
<div class="tabs-buttons-container">
<div class="tabs-button selected" id="create-button">CREATE PROJECT</div>
<div class="tabs-button"id="update-button">UPDATE DEPENDENCIES</div>
<div class="tabs-button"id="bot-button">BOT COMMAND</div>
</div>
<div class="tab" id="create-text">
<pre>
<code>
@CommandHandler(<span class="code-light-green">"Kotlin Spring 5 generator"</span>, <span class="code-light-green">"Generate a new spring Kotlin project"</span>)
<span class="code-green">export class</span> <span class="code-yellow">KotlinSpring5</span> <span class="code-green">extends</span> <span class="code-yellow">JavaSeed</span>
public projectEditor(ctx: HandlerContext, params:<span class="code-green"> this</span>): ProjectEditor {
<span class="code-green">return</span> transformSeed;
}
<span class="code-green">const</span> transformSeed: ProjectEditor = <span class="purple">project: Project, ctx: HandlerContext, pars: KotlinSpring5</span>) => {
<span class="code-green">const</span> artifact = camelize(pars.artifactId);
<span class="code-green">const</span> appName = artifact.charAt(<span class="blue">0</span>).toUpperCase() + artifact.substr(<span class="blue">1</span>);
<span class="code-green">const</span> smartArtifactId = (pars.artifactId === <span class="code-light-green">"${projectName}"</span>) ? project.name : pars.artifactId;
<span class="code-green">return</span> updatePom(project, smartArtifactId, pars.groupId, pars.version, pars.description)
.then(inferFromKotlinSource)
.then(<span class="purple">structure</span> => !!structure ?
renameAppClass(project, structure, appName)
.then(<span class="purple">p</span> => movePackage(p, structure.applicationPackage, pars.rootPackage, AllKotlinFiles))
: project);
};
<span class="code-green">function</span> <span class="code-yellow">renameAppClass</span>(<span class="purple">project: Project, structure: SpringBootProjectStructure,
appName: string</span>): <span class="code-yellow">Promise</span> {
<span class="code-green">return</span> doWithFiles(project, AllKotlinFiles, <span class="purple">f</span> =>
f.replaceAll(structure.applicationClassStem, appName)
.then(f => f.path.includes(structure.applicationClassStem) ?
f.setPath(f.path.replace(structure.applicationClassStem, appName)) :
f
)
)
}
</code>
</pre>
</div>
<div class="tab hide" id="update-text">
<pre>
<code>
<span class="code-green">@CommandHandler</span>(<span class="code-light-green">"Upgrade versions of Spring Boot across an org"</span>, <span class="code-light-green">"upgrade spring boot version"</span>)
export <span class="code-green">class</span> <span class="code-yellow">SpringBootVersionUpgrade</span> <span class="code-green">extends</span> <span class="code-yellow">EditorCommandSupport</span> {
<span class="code-green">@Secret</span>(Secrets.userToken([<span class="code-light-green">"repo"</span>, <span class="code-light-green">"user"</span>]))
<span class="code-green">protected</span> githubToken;
<span class="code-green">@Parameter</span>({
displayName: <span class="code-light-green">"Desired Spring Boot version"</span>,
description: <span class="code-light-green">"The desired Spring Boot version across these repos"</span>,
pattern: /^.+$/,
validInput: <span class="code-light-green">"Semantic version"</span>,
required: <span class="code-green">false</span>,
})
<span class="code-green">public</span> desiredBootVersion: string;
<span class="code-green">public</span> <span class="code-yellow">projectEditor</span><span class="purple">()</span>: ProjectEditor {
<span class="code-green">return</span> setSpringBootVersionEditor(<span class="code-green">this</span>.desiredBootVersion);
}
<span class="code-green">public</span> <span class="code-yellow">editInfo</span><span class="purple">(p: Project)</span>: EditMode {
<span class="code-green">return new</span> PullRequest(<span class="code-light-green">"spring-boot-"</span> + <span class="code-green">this</span>.desiredBootVersion,
<span class="code-light-green">"Upgrade Spring Boot to "</span> + <span class="code-green">this</span>.desiredBootVersion);
}
}
export function <span class="code-yellow">setSpringBootVersionEditor</span><span class="purple">(desiredBootVersion: string)</span>: AnyProjectEditor {
<span class="code-green">return</span> p =>
doWithAtMostOneMatch(p, <span class="code-light-green">"pom.xml"</span>,
parentStanzaOfGrammar(SpringBootStarter), m => {
<span class="code-green">if</span> (m.version.value !== desiredBootVersion) {
m.version.value = desiredBootVersion;
}
});
}
</code>
</pre>
</div>
<div class="tab hide" id="bot-text">
<pre>
<code>
@CommandHandler(<span class="code-light-green">"Query Stack Overflow"</span>, <span class="code-light-green">"search so"</span>)
@Tags(<span class="code-light-green">"stack-overflow"</span>)
<span class="code-green">export class</span> <span class="code-yellow">SearchStackOverflow implements HandleCommand</span> {
@Parameter({ description: <span class="code-light-green">"your search query"</span>, pattern: <span class="blue">/^.*$/</span> })
public q: string;
public handle(ctx: HandlerContext): <span class="code-light-green">Promise</span> {
<span class="code-green">return</span> axios.get(<span class="code-light-green">`${apiSearchUrl}${encodeURIComponent(</span><span class="code-green">this</span>.q)}`)
.then(res => <span class="code-green">this</span>.handleResult(<span class="purple">res</span>, <span class="code-green">this</span>.q))
.then(<span class="purple">msg</span> => <span class="code-green">return</span> ctx.messageClient.respond(msg) });
}
}
</code>
</pre>
</div>
</section>
<!-- 5_tab_demo end -->
<!-- 6_footer start -->
<section id="footer-links">
<ul>
<li><a href="#">ABOUT US</a></li>
<li><a href="#">TERMS</a></li>
<li><a href="#">PRIVACY</a></li>
<li><a href="#">THE COMPOSITION</a></li>
<li><a href="#">CONTACT</a></li>
</ul>
</section>
<section id="footer-email">
<h3>STAY IN THE KNOW. SIGN UP NOW!</h3>
<form id="email">
<input type="email" value="" placeholder="email address" id="email-box" name="usremail">
<input type="submit" value="SUBSCRIBE" id="email-btn" class="button" name="subscribe">
</form>
</section>
<footer id="footer-copyright">
<div class="made-with-love">
<p>CREATED WITH <img src="https://atomist.com/img/heart.png"> BY ATOMIST IN SAN FRANCISCO & BEYOND</p>
</div>
<div class="copyright">
<p>COPYRIGHT © 2017 ATOMIST</p>
</div>
<div class="twitter">
<a href="#"><img src="https://atomist.com/img/twitter.png"></a>
<p>Follow us on Twitter</p>
</div>
</footer>
<!-- 6_footer end -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script type="text/javascript" src="slick/slick.min.js"></script>
<script type="text/javascript" src="js/main.js" ></script>
</body>
</html>