WEBVTT

1
00:00:02.945 --> 00:00:03.245
<00:00:02.945>All <00:00:03.215>right.

2
00:00:03.585 --> 00:00:07.525
<00:00:03.585>Uh, <00:00:03.760>I'm <00:00:03.935>Ronis, <00:00:04.109>I'm <00:00:04.285>a <00:00:04.460>consultant <00:00:04.635>at <00:00:04.810>Factor <00:00:04.984>10,

3
00:00:07.825 --> 00:00:09.525
<00:00:07.825>and <00:00:08.175>that's <00:00:08.525>about <00:00:08.875>the <00:00:09.225>amount

4
00:00:09.525 --> 00:00:10.685
<00:00:09.525>of <00:00:09.699>time <00:00:09.873>I <00:00:10.047>have <00:00:10.221>for <00:00:10.395>my <00:00:10.569>introduction.

5
00:00:10.685 --> 00:00:14.805
<00:00:10.685>So <00:00:10.860>let's <00:00:11.035>go. <00:00:11.210>Uh, <00:00:11.385>I'm <00:00:11.560>gonna <00:00:11.735>talk <00:00:11.910>about <00:00:12.085>pipelines

6
00:00:15.065 --> 00:00:17.285
<00:00:15.065>and <00:00:15.264>what <00:00:15.465>pipelines <00:00:15.665>should <00:00:15.865>and <00:00:16.064>should <00:00:16.265>not <00:00:16.465>do.

7
00:00:18.145 --> 00:00:19.205
<00:00:18.145>And <00:00:18.383>we're <00:00:18.622>going <00:00:18.860>to <00:00:19.098>try

8
00:00:19.205 --> 00:00:22.005
<00:00:19.205>and <00:00:19.404>reduce <00:00:19.604>three <00:00:19.805>things <00:00:20.005>that <00:00:20.205>our <00:00:20.404>pipelines <00:00:20.604>do.

9
00:00:22.265 --> 00:00:25.165
<00:00:22.265>Uh, <00:00:22.498>we're <00:00:22.731>gonna <00:00:22.965>try <00:00:23.198>and <00:00:23.431>reduce <00:00:23.665>boredom.

10
00:00:26.105 --> 00:00:28.885
<00:00:26.105>Uh, <00:00:26.245>a <00:00:26.385>longrun <00:00:26.525>pipeline <00:00:26.665>where <00:00:26.805>you <00:00:26.945>have <00:00:27.085>to <00:00:27.225>wait <00:00:27.365>for <00:00:27.505>it.

11
00:00:29.265 --> 00:00:32.525
<00:00:29.265>It <00:00:29.498>interrupts <00:00:29.731>your <00:00:29.965>flow. <00:00:30.198>So, <00:00:30.431>uh, <00:00:30.665>let's,

12
00:00:32.525 --> 00:00:33.845
<00:00:32.525>let's <00:00:32.821>take <00:00:33.119>a <00:00:33.416>quick <00:00:33.713>check.

13
00:00:34.685 --> 00:00:37.085
<00:00:34.685>I <00:00:34.825>guess <00:00:34.965>you <00:00:35.105>are <00:00:35.245>all <00:00:35.385>running <00:00:35.525>pipelines <00:00:35.665>because <00:00:35.805>you <00:00:35.945>are <00:00:36.085>here.

14
00:00:37.385 --> 00:00:39.165
<00:00:37.385>So <00:00:37.585>how <00:00:37.785>many <00:00:37.985>in <00:00:38.184>here <00:00:38.385>have <00:00:38.585>a <00:00:38.785>pipeline

15
00:00:39.875 --> 00:00:42.645
<00:00:39.875>that <00:00:40.155>runs <00:00:40.435>longer <00:00:40.715>than <00:00:40.995>15 <00:00:41.275>minutes?

16
00:00:43.595 --> 00:00:47.205
<00:00:43.595>Yeah, <00:00:43.769>keep <00:00:43.945>your <00:00:44.120>hand <00:00:44.295>up <00:00:44.470>if <00:00:44.644>your <00:00:44.820>pipeline <00:00:44.995>runs

17
00:00:47.205 --> 00:00:48.325
<00:00:47.205>longer <00:00:47.541>than <00:00:47.877>30 <00:00:48.213>minutes.

18
00:00:50.425 --> 00:00:53.645
<00:00:50.425>How <00:00:50.599>about <00:00:50.775>an <00:00:50.949>hour? <00:00:51.125>There's <00:00:51.300>still <00:00:51.474>some <00:00:51.650>hands <00:00:51.824>up.

19
00:00:53.825 --> 00:00:55.405
<00:00:53.825>How <00:00:54.058>many <00:00:54.291>in <00:00:54.525>here <00:00:54.758>have <00:00:54.991>a <00:00:55.225>pipeline

20
00:00:55.405 --> 00:00:57.045
<00:00:55.405>that <00:00:55.638>runs <00:00:55.871>longer <00:00:56.105>than <00:00:56.338>a <00:00:56.571>work <00:00:56.805>day?

21
00:00:57.185 --> 00:01:00.245
<00:00:57.185>That's <00:00:57.385>eight <00:00:57.585>hours. <00:00:57.785>Yeah, <00:00:57.985>I'm <00:00:58.185>sorry <00:00:58.385>for <00:00:58.585>you.

22
00:01:03.255 --> 00:01:06.325
<00:01:03.255>We're <00:01:03.455>also <00:01:03.655>gonna <00:01:03.855>try <00:01:04.055>and <00:01:04.254>reduce <00:01:04.455>frustration <00:01:04.655>and

23
00:01:06.325 --> 00:01:09.125
<00:01:06.325>because <00:01:06.500>a <00:01:06.675>frustrating <00:01:06.850>pipeline, <00:01:07.025>we <00:01:07.200>interact <00:01:07.375>with <00:01:07.550>them <00:01:07.725>daily,

24
00:01:09.745 --> 00:01:10.765
<00:01:09.745>uh, <00:01:09.928>a <00:01:10.112>lot <00:01:10.295>of <00:01:10.479>the <00:01:10.663>time.

25
00:01:12.105 --> 00:01:14.485
<00:01:12.105>And <00:01:12.338>the <00:01:12.571>worst <00:01:12.805>thing <00:01:13.038>is <00:01:13.271>a <00:01:13.505>feeling

26
00:01:14.485 --> 00:01:16.125
<00:01:14.485>where <00:01:14.765>your <00:01:15.045>pipeline <00:01:15.325>is <00:01:15.605>something <00:01:15.885>breaks.

27
00:01:16.345 --> 00:01:20.445
<00:01:16.345>You <00:01:16.472>don't <00:01:16.599>know <00:01:16.726>why. <00:01:16.854>How <00:01:16.981>many <00:01:17.108>in <00:01:17.235>here <00:01:17.363>have <00:01:17.490>fixed <00:01:17.617>the <00:01:17.745>pipeline

28
00:01:20.615 --> 00:01:22.605
<00:01:20.615>error <00:01:21.081>by <00:01:21.548>hitting <00:01:22.015>retry?

29
00:01:23.915 --> 00:01:26.725
<00:01:23.914>Yeah. <00:01:24.264>Does <00:01:24.615>that <00:01:24.964>feel <00:01:25.315>good?

30
00:01:28.755 --> 00:01:31.125
<00:01:28.755>Doesn't <00:01:30.155>so,

31
00:01:31.305 --> 00:01:34.565
<00:01:31.305>and <00:01:31.460>if <00:01:31.616>we <00:01:31.771>can, <00:01:31.927>we're <00:01:32.082>also <00:01:32.238>gonna <00:01:32.393>do <00:01:32.549>our <00:01:32.705>thing

32
00:01:34.565 --> 00:01:35.605
<00:01:34.565>for <00:01:34.877>the <00:01:35.189>environment, <00:01:35.500>right?

33
00:01:36.115 --> 00:01:40.125
<00:01:36.115>Long <00:01:36.348>running <00:01:36.581>pipelines, <00:01:36.815>rerunning <00:01:37.048>pipelines, <00:01:37.281>all <00:01:37.515>of

34
00:01:40.125 --> 00:01:44.365
<00:01:40.125>that <00:01:40.325>uses <00:01:40.525>compute <00:01:40.725>power, <00:01:40.925>compute <00:01:41.125>power <00:01:41.325>results <00:01:41.525>in

35
00:01:45.285 --> 00:01:47.045
<00:01:45.285>CO2 <00:01:46.685>equivalents,

36
00:01:47.415 --> 00:01:49.765
<00:01:47.414>which <00:01:47.615>have <00:01:47.815>a <00:01:48.014>negative <00:01:48.214>impact <00:01:48.414>on <00:01:48.615>the <00:01:48.815>environment.

37
00:01:49.765 --> 00:01:52.405
<00:01:49.765>So <00:01:49.920>if <00:01:50.076>we, <00:01:50.231>if <00:01:50.387>ever <00:01:50.542>possible, <00:01:50.698>we <00:01:50.853>going <00:01:51.009>to <00:01:51.165>try

38
00:01:52.405 --> 00:01:53.925
<00:01:52.405>and <00:01:52.747>reduce <00:01:53.089>our <00:01:53.431>environmental <00:01:53.773>impact,

39
00:01:54.345 --> 00:01:56.685
<00:01:54.345>or <00:01:54.578>at <00:01:54.811>least <00:01:55.045>our <00:01:55.278>pipeline's <00:01:55.511>environmental <00:01:55.745>impact.

40
00:01:58.105 --> 00:02:01.405
<00:01:58.104>So <00:01:58.304>let's <00:01:58.505>jump <00:01:58.704>straight <00:01:58.904>into <00:01:59.104>the, <00:01:59.304>uh, <00:01:59.505>patterns

41
00:02:01.405 --> 00:02:05.445
<00:02:01.405>and <00:02:01.580>antipas <00:02:01.755>with <00:02:01.930>number <00:02:02.105>one, <00:02:02.280>the <00:02:02.455>ritual, <00:02:02.630>which <00:02:02.805>is

42
00:02:05.615 --> 00:02:09.565
<00:02:05.615>where <00:02:05.789>your <00:02:05.964>pipeline <00:02:06.140>is <00:02:06.315>doing <00:02:06.490>everything <00:02:06.664>all <00:02:06.839>the <00:02:07.015>time.

43
00:02:09.635 --> 00:02:11.205
<00:02:09.634>It's <00:02:10.101>a <00:02:10.568>ritualistic <00:02:11.035>pipeline

44
00:02:11.205 --> 00:02:12.645
<00:02:11.205>that <00:02:11.390>does <00:02:11.575>all <00:02:11.760>the <00:02:11.945>steps <00:02:12.130>all <00:02:12.315>the <00:02:12.501>time.

45
00:02:13.705 --> 00:02:17.205
<00:02:13.705>And <00:02:13.905>this <00:02:14.105>usually <00:02:14.305>happens <00:02:14.505>quite <00:02:14.705>organically <00:02:14.905>or <00:02:15.105>naturally.

46
00:02:18.185 --> 00:02:20.125
<00:02:18.185>Uh, <00:02:18.418>we <00:02:18.651>start <00:02:18.885>with <00:02:19.118>a, <00:02:19.351>uh, <00:02:19.585>PR

47
00:02:21.405 --> 00:02:22.885
<00:02:21.405>'cause <00:02:21.553>that's <00:02:21.701>where <00:02:21.849>we <00:02:21.997>use <00:02:22.144>our <00:02:22.293>pipeline <00:02:22.441>the <00:02:22.589>most, <00:02:22.737>right?

48
00:02:22.885 --> 00:02:24.165
<00:02:22.885>We <00:02:23.049>have <00:02:23.214>a <00:02:23.378>pr <00:02:23.543>we <00:02:23.707>wanna <00:02:23.872>make <00:02:24.036>sure

49
00:02:24.165 --> 00:02:25.325
<00:02:24.165>that <00:02:24.373>no <00:02:24.582>one <00:02:24.791>breaks <00:02:25.000>the <00:02:25.209>software.

50
00:02:25.945 --> 00:02:27.885
<00:02:25.945>We <00:02:26.144>do <00:02:26.345>some <00:02:26.545>linting, <00:02:26.745>we <00:02:26.945>do <00:02:27.144>our <00:02:27.345>tests.

51
00:02:28.465 --> 00:02:30.965
<00:02:28.465>We <00:02:28.665>do, <00:02:28.865>and <00:02:29.065>once <00:02:29.265>everything <00:02:29.465>passes, <00:02:29.665>we're <00:02:29.865>free

52
00:02:30.965 --> 00:02:32.125
<00:02:30.965>to <00:02:31.226>merge <00:02:31.487>our, <00:02:31.748>our <00:02:32.009>code.

53
00:02:33.785 --> 00:02:37.525
<00:02:33.785>But <00:02:33.960>even <00:02:34.135>if <00:02:34.310>you <00:02:34.484>do <00:02:34.660>all <00:02:34.835>these <00:02:35.010>steps, <00:02:35.185>uh,

54
00:02:37.585 --> 00:02:38.805
<00:02:37.585>if <00:02:37.951>someone <00:02:38.317>else <00:02:38.683>merges

55
00:02:38.805 --> 00:02:42.605
<00:02:38.805>before <00:02:38.921>you, <00:02:39.038>we <00:02:39.155>can <00:02:39.271>end <00:02:39.388>up <00:02:39.505>in <00:02:39.621>a <00:02:39.738>state <00:02:39.855>where <00:02:39.971>our <00:02:40.088>main <00:02:40.205>branch

56
00:02:43.435 --> 00:02:45.445
<00:02:43.435>doesn't <00:02:43.715>build <00:02:43.995>the <00:02:44.275>test, <00:02:44.555>doesn't <00:02:44.835>work,

57
00:02:45.905 --> 00:02:47.365
<00:02:45.905>but <00:02:46.167>there <00:02:46.430>was <00:02:46.693>no <00:02:46.956>merge <00:02:47.219>conflict.

58
00:02:48.505 --> 00:02:50.645
<00:02:48.505>So <00:02:48.704>your <00:02:48.905>colleague <00:02:49.105>merchant <00:02:49.305>is <00:02:49.505>pr <00:02:49.704>i, <00:02:49.905>me,

59
00:02:50.665 --> 00:02:53.325
<00:02:50.665>my <00:02:50.945>PR <00:02:51.225>and <00:02:51.505>the <00:02:51.785>program <00:02:52.065>breaks.

60
00:02:54.105 --> 00:02:56.925
<00:02:54.105>So <00:02:54.260>now, <00:02:54.416>well, <00:02:54.571>I <00:02:54.727>mean, <00:02:54.882>how <00:02:55.038>do <00:02:55.193>we <00:02:55.349>combat <00:02:55.505>that?

61
00:02:56.925 --> 00:02:59.365
<00:02:56.925>Well, <00:02:57.100>we <00:02:57.275>run <00:02:57.450>our <00:02:57.625>pipeline <00:02:57.800>after <00:02:57.975>merge <00:02:58.150>as <00:02:58.325>well.

62
00:02:59.705 --> 00:03:02.005
<00:02:59.704>So <00:02:59.844>we <00:02:59.984>take <00:03:00.124>the <00:03:00.265>same <00:03:00.404>pipeline, <00:03:00.545>we <00:03:00.684>just <00:03:00.825>add <00:03:00.964>a <00:03:01.105>trigger

63
00:03:02.185 --> 00:03:03.685
<00:03:02.185>and <00:03:02.410>say, <00:03:02.635>well <00:03:02.860>run <00:03:03.085>this <00:03:03.310>on <00:03:03.535>PR

64
00:03:04.345 --> 00:03:05.925
<00:03:04.345>and <00:03:04.578>then <00:03:04.811>run <00:03:05.045>it <00:03:05.278>whenever <00:03:05.511>we <00:03:05.745>merge.

65
00:03:07.945 --> 00:03:11.325
<00:03:07.945>But <00:03:08.144>then <00:03:08.345>after <00:03:08.545>a <00:03:08.745>while, <00:03:08.945>there <00:03:09.144>was, <00:03:09.345>uh,

66
00:03:11.545 --> 00:03:12.605
<00:03:11.545>say <00:03:11.863>a <00:03:12.180>summer <00:03:12.499>vacation.

67
00:03:12.825 --> 00:03:13.885
<00:03:12.825>No <00:03:13.015>one <00:03:13.206>was <00:03:13.397>checking <00:03:13.588>in <00:03:13.779>code,

68
00:03:14.305 --> 00:03:18.685
<00:03:14.305>but <00:03:14.460>some <00:03:14.616>of <00:03:14.771>our <00:03:14.927>upstream <00:03:15.082>dependencies <00:03:15.238>changed <00:03:15.393>some <00:03:15.549>of <00:03:15.705>the,

69
00:03:18.825 --> 00:03:21.325
<00:03:18.825>the, <00:03:19.058>uh, <00:03:19.291>we <00:03:19.524>interact <00:03:19.758>with <00:03:19.991>Google <00:03:20.225>Maps

70
00:03:21.425 --> 00:03:24.405
<00:03:21.425>and <00:03:21.580>they <00:03:21.736>changed <00:03:21.891>something <00:03:22.047>in <00:03:22.202>the <00:03:22.358>API, <00:03:22.513>our <00:03:22.669>software <00:03:22.825>broke,

71
00:03:25.105 --> 00:03:26.205
<00:03:25.105>but <00:03:25.303>no <00:03:25.500>one <00:03:25.698>changed <00:03:25.897>it, <00:03:26.094>right?

72
00:03:26.765 --> 00:03:28.485
<00:03:26.765>'cause <00:03:26.881>there <00:03:26.998>was <00:03:27.114>no <00:03:27.231>one <00:03:27.348>there. <00:03:27.464>So <00:03:27.581>now <00:03:27.698>we <00:03:27.815>need <00:03:27.931>to <00:03:28.048>make <00:03:28.165>sure

73
00:03:28.485 --> 00:03:31.485
<00:03:28.485>that <00:03:28.660>our <00:03:28.835>software <00:03:29.010>doesn't <00:03:29.185>break <00:03:29.360>when <00:03:29.535>we're <00:03:29.710>not <00:03:29.885>there,

74
00:03:31.505 --> 00:03:33.085
<00:03:31.505>or <00:03:31.785>that <00:03:32.065>we <00:03:32.345>are <00:03:32.625>aware <00:03:32.905>of

75
00:03:33.155 --> 00:03:34.845
<00:03:33.155>outside <00:03:33.435>changes <00:03:33.715>that <00:03:33.995>break <00:03:34.275>our <00:03:34.555>software.

76
00:03:34.865 --> 00:03:39.005
<00:03:34.865>So <00:03:34.992>we <00:03:35.119>run <00:03:35.246>our <00:03:35.374>same <00:03:35.501>pipeline. <00:03:35.628>We <00:03:35.755>run <00:03:35.883>it <00:03:36.010>nightly <00:03:36.137>every <00:03:36.265>day.

77
00:03:39.005 --> 00:03:41.685
<00:03:39.005>We <00:03:39.144>run <00:03:39.285>the <00:03:39.424>pipeline <00:03:39.565>to <00:03:39.704>make <00:03:39.845>sure <00:03:39.984>that <00:03:40.125>it <00:03:40.265>still <00:03:40.405>works

78
00:03:41.875 --> 00:03:43.045
<00:03:41.875>with <00:03:42.226>the <00:03:42.577>outside <00:03:42.928>environment.

79
00:03:43.625 --> 00:03:45.245
<00:03:43.625>Now <00:03:43.858>we <00:03:44.091>have <00:03:44.325>the <00:03:44.558>same <00:03:44.791>pipeline <00:03:45.025>running

80
00:03:46.305 --> 00:03:49.245
<00:03:46.305>on <00:03:46.480>every <00:03:46.655>pr <00:03:46.830>on <00:03:47.005>every <00:03:47.180>merge <00:03:47.355>and <00:03:47.530>every <00:03:47.705>nightly.

81
00:03:50.585 --> 00:03:53.285
<00:03:50.585>And <00:03:50.818>then <00:03:51.051>we, <00:03:51.285>well, <00:03:51.518>the <00:03:51.751>product <00:03:51.985>management

82
00:03:53.305 --> 00:03:56.605
<00:03:53.305>or <00:03:53.445>the <00:03:53.585>sales <00:03:53.725>team, <00:03:53.865>they <00:03:54.005>wanna <00:03:54.145>run <00:03:54.285>the <00:03:54.425>software <00:03:54.565>as <00:03:54.705>well,

83
00:03:56.905 --> 00:03:58.885
<00:03:56.905>but <00:03:57.105>they <00:03:57.305>can't <00:03:57.505>set <00:03:57.705>up <00:03:57.905>the <00:03:58.105>development <00:03:58.305>environment.

84
00:03:58.915 --> 00:04:01.485
<00:03:58.915>They <00:03:59.070>can't <00:03:59.226>build, <00:03:59.381>'cause <00:03:59.537>they <00:03:59.692>only <00:03:59.848>have, <00:04:00.003>I <00:04:00.159>don't <00:04:00.315>know,

85
00:04:01.815 --> 00:04:02.965
<00:04:01.815>excel <00:04:02.160>on <00:04:02.505>their <00:04:02.850>software.

86
00:04:03.115 --> 00:04:05.325
<00:04:03.115>It's <00:04:03.395>called <00:04:03.675>Excel <00:04:03.955>Count, <00:04:04.235>compile, <00:04:04.515>uh,

87
00:04:05.325 --> 00:04:06.765
<00:04:05.325>however <00:04:05.649>much <00:04:05.972>people <00:04:06.297>wanted <00:04:06.620>to.

88
00:04:08.185 --> 00:04:09.485
<00:04:08.185>So <00:04:08.419>we <00:04:08.653>add <00:04:08.887>a <00:04:09.121>published <00:04:09.355>step.

89
00:04:09.705 --> 00:04:11.565
<00:04:09.705>So <00:04:09.880>now <00:04:10.055>we <00:04:10.230>published <00:04:10.405>artifact, <00:04:10.580>their <00:04:10.755>pipeline <00:04:10.930>as <00:04:11.105>well.

90
00:04:11.905 --> 00:04:16.045
<00:04:11.905>So <00:04:12.045>right <00:04:12.185>now <00:04:12.325>we <00:04:12.465>have <00:04:12.605>the <00:04:12.745>same <00:04:12.885>pipeline <00:04:13.025>running <00:04:13.165>three <00:04:13.305>times

91
00:04:16.625 --> 00:04:17.845
<00:04:16.625>in <00:04:16.991>three <00:04:17.357>different <00:04:17.723>situations.

92
00:04:18.225 --> 00:04:20.285
<00:04:18.225>And <00:04:18.425>they <00:04:18.625>all <00:04:18.825>do <00:04:19.025>the <00:04:19.225>exact <00:04:19.425>same <00:04:19.625>thing.

93
00:04:20.385 --> 00:04:22.565
<00:04:20.385>We <00:04:20.540>run <00:04:20.696>all <00:04:20.851>the <00:04:21.007>tests, <00:04:21.162>we <00:04:21.318>do <00:04:21.473>all <00:04:21.629>the <00:04:21.784>linting

94
00:04:22.565 --> 00:04:23.685
<00:04:22.565>and <00:04:22.817>we <00:04:23.069>publish <00:04:23.321>an <00:04:23.573>artifact,

95
00:04:25.105 --> 00:04:28.965
<00:04:25.105>but <00:04:25.260>we <00:04:25.416>really <00:04:25.571>don't <00:04:25.727>need <00:04:25.882>to <00:04:26.038>run <00:04:26.193>the <00:04:26.349>backend <00:04:26.505>tests

96
00:04:29.425 --> 00:04:31.965
<00:04:29.425>and <00:04:29.580>the <00:04:29.736>front <00:04:29.891>end <00:04:30.047>tests <00:04:30.202>because <00:04:30.358>of <00:04:30.513>unit <00:04:30.669>tests, <00:04:30.825>right?

97
00:04:32.155 --> 00:04:35.765
<00:04:32.155>They're <00:04:32.310>only <00:04:32.466>using <00:04:32.621>things <00:04:32.777>that <00:04:32.932>are <00:04:33.088>on <00:04:33.243>in <00:04:33.399>the <00:04:33.554>repositories.

98
00:04:35.825 --> 00:04:37.445
<00:04:35.825>We <00:04:36.058>don't <00:04:36.291>need <00:04:36.525>to <00:04:36.758>run <00:04:36.991>them <00:04:37.224>lightly.

99
00:04:37.775 --> 00:04:40.205
<00:04:37.775>We're <00:04:37.974>only <00:04:38.174>really <00:04:38.375>interested <00:04:38.575>in <00:04:38.775>the <00:04:38.974>integration <00:04:39.174>tests.

100
00:04:40.785 --> 00:04:43.565
<00:04:40.784>And <00:04:40.960>we <00:04:41.135>definitely <00:04:41.309>don't <00:04:41.484>need <00:04:41.659>to <00:04:41.835>publish <00:04:42.010>an <00:04:42.184>artifact

101
00:04:43.565 --> 00:04:45.645
<00:04:43.565>because <00:04:43.765>the <00:04:43.965>artifact, <00:04:44.165>if <00:04:44.365>the <00:04:44.565>code <00:04:44.765>hasn't <00:04:44.965>changed,

102
00:04:46.145 --> 00:04:47.565
<00:04:46.145>we <00:04:46.400>produce <00:04:46.656>the <00:04:46.911>same <00:04:47.167>artifact <00:04:47.423>again,

103
00:04:47.565 --> 00:04:49.525
<00:04:47.565>which <00:04:47.915>is <00:04:48.265>kinda <00:04:48.615>wasteful, <00:04:48.965>right?

104
00:04:50.305 --> 00:04:55.005
<00:04:50.305>And <00:04:50.460>the <00:04:50.616>same <00:04:50.771>after <00:04:50.927>merge, <00:04:51.082>we <00:04:51.238>probably, <00:04:51.393>we <00:04:51.549>don't <00:04:51.705>need

105
00:04:55.025 --> 00:04:57.845
<00:04:55.025>to <00:04:55.180>run <00:04:55.336>the <00:04:55.491>lint, <00:04:55.647>uh, <00:04:55.802>front <00:04:55.958>and <00:04:56.113>the <00:04:56.269>backend <00:04:56.424>lint

106
00:04:57.845 --> 00:04:59.645
<00:04:57.845>because <00:04:58.545>that <00:04:59.245>shouldn't,

107
00:04:59.645 --> 00:05:02.445
<00:04:59.645>that <00:04:59.772>should <00:04:59.899>result <00:05:00.026>in <00:05:00.154>a <00:05:00.281>merge <00:05:00.408>conflict <00:05:00.535>if <00:05:00.663>we <00:05:00.790>get <00:05:00.917>new <00:05:01.044>lints.

108
00:05:02.665 --> 00:05:04.685
<00:05:02.665>But <00:05:02.805>we <00:05:02.945>should <00:05:03.085>run <00:05:03.225>the <00:05:03.365>tests <00:05:03.505>because <00:05:03.645>they <00:05:03.785>can <00:05:03.925>still <00:05:04.065>fail.

109
00:05:05.185 --> 00:05:08.485
<00:05:05.185>So <00:05:05.418>instead <00:05:05.651>of <00:05:05.885>copying <00:05:06.118>the <00:05:06.351>same <00:05:06.585>pipeline

110
00:05:08.485 --> 00:05:09.965
<00:05:08.485>or <00:05:08.707>adding <00:05:08.929>triggers <00:05:09.151>to <00:05:09.373>the <00:05:09.594>same <00:05:09.817>pipeline,

111
00:05:10.225 --> 00:05:11.565
<00:05:10.225>we <00:05:10.466>should <00:05:10.707>use <00:05:10.948>pattern <00:05:11.189>number <00:05:11.431>one,

112
00:05:11.565 --> 00:05:14.245
<00:05:11.565>which <00:05:11.740>is <00:05:11.915>choosing <00:05:12.090>the <00:05:12.265>right <00:05:12.440>pipeline <00:05:12.615>for <00:05:12.790>the <00:05:12.965>job

113
00:05:14.305 --> 00:05:15.445
<00:05:14.305>of <00:05:14.561>the, <00:05:14.818>for <00:05:15.074>the <00:05:15.331>situation.

114
00:05:16.025 --> 00:05:19.925
<00:05:16.025>So <00:05:16.152>now <00:05:16.279>we <00:05:16.406>have <00:05:16.534>a <00:05:16.661>PR <00:05:16.788>pipeline, <00:05:16.915>which <00:05:17.043>is <00:05:17.170>a <00:05:17.297>separate <00:05:17.424>pipeline.

115
00:05:20.585 --> 00:05:22.405
<00:05:20.585>It <00:05:20.784>runs <00:05:20.984>all <00:05:21.185>the <00:05:21.385>tests, <00:05:21.585>all <00:05:21.784>the <00:05:21.984>links,

116
00:05:22.545 --> 00:05:23.885
<00:05:22.545>but <00:05:22.786>it <00:05:23.027>doesn't <00:05:23.268>produce <00:05:23.509>an <00:05:23.751>artifact.

117
00:05:24.145 --> 00:05:27.685
<00:05:24.145>But <00:05:24.284>we <00:05:24.424>don't <00:05:24.565>need <00:05:24.705>artifact <00:05:24.844>after <00:05:24.984>pr, <00:05:25.125>probably <00:05:25.265>not <00:05:25.405>at <00:05:25.544>least.

118
00:05:28.265 --> 00:05:29.445
<00:05:28.265>And <00:05:28.477>then <00:05:28.689>we <00:05:28.902>have <00:05:29.114>the <00:05:29.327>merge.

119
00:05:29.985 --> 00:05:32.805
<00:05:29.985>Uh, <00:05:30.125>after <00:05:30.265>we <00:05:30.405>merge <00:05:30.545>a <00:05:30.685>a <00:05:30.825>pr, <00:05:30.965>we <00:05:31.105>run <00:05:31.245>the <00:05:31.385>setup,

120
00:05:32.865 --> 00:05:35.125
<00:05:32.865>we <00:05:33.020>run <00:05:33.176>the <00:05:33.331>tests <00:05:33.487>again, <00:05:33.642>we <00:05:33.798>run <00:05:33.953>all <00:05:34.109>the <00:05:34.265>tests,

121
00:05:35.185 --> 00:05:38.005
<00:05:35.185>and <00:05:35.312>then <00:05:35.439>we <00:05:35.566>publish <00:05:35.694>an <00:05:35.821>artifact, <00:05:35.948>but <00:05:36.075>we <00:05:36.203>don't <00:05:36.330>run <00:05:36.457>the <00:05:36.585>lint

122
00:05:38.075 --> 00:05:39.845
<00:05:38.075>because <00:05:38.425>that <00:05:38.775>probably <00:05:39.125>didn't <00:05:39.474>change.

123
00:05:40.385 --> 00:05:41.405
<00:05:40.385>And <00:05:40.568>then <00:05:40.752>we <00:05:40.935>have <00:05:41.119>the <00:05:41.303>nightly,

124
00:05:41.405 --> 00:05:42.885
<00:05:41.405>which <00:05:41.671>only <00:05:41.937>does <00:05:42.204>the <00:05:42.470>integration <00:05:42.736>tests

125
00:05:43.195 --> 00:05:46.645
<00:05:43.195>because <00:05:43.370>if <00:05:43.545>nothing <00:05:43.719>has <00:05:43.895>changed <00:05:44.070>on <00:05:44.245>the <00:05:44.420>main <00:05:44.594>branch,

126
00:05:47.335 --> 00:05:49.885
<00:05:47.335>while <00:05:47.568>the <00:05:47.801>backend <00:05:48.034>tests, <00:05:48.268>front <00:05:48.501>end <00:05:48.734>tests

127
00:05:49.945 --> 00:05:51.845
<00:05:49.945>and <00:05:50.224>the <00:05:50.505>lints, <00:05:50.784>they <00:05:51.065>can't <00:05:51.344>fail.

128
00:05:52.345 --> 00:05:53.885
<00:05:52.345>So <00:05:52.576>there's <00:05:52.807>no <00:05:53.038>reason <00:05:53.269>in <00:05:53.500>running <00:05:53.731>them.

129
00:05:54.105 --> 00:05:56.685
<00:05:54.105>We <00:05:54.245>only <00:05:54.385>need <00:05:54.525>to <00:05:54.665>run <00:05:54.805>the <00:05:54.945>integration <00:05:55.085>tests <00:05:55.225>to <00:05:55.365>make <00:05:55.505>sure

130
00:05:56.685 --> 00:05:59.965
<00:05:56.685>that <00:05:56.860>we <00:05:57.035>are <00:05:57.210>still <00:05:57.385>friends <00:05:57.560>with <00:05:57.735>the <00:05:57.910>outside <00:05:58.085>environment.

131
00:06:02.345 --> 00:06:05.445
<00:06:02.345>And <00:06:02.520>we <00:06:02.695>can <00:06:02.870>take <00:06:03.045>this <00:06:03.220>one <00:06:03.395>step <00:06:03.570>further, <00:06:03.745>uh,

132
00:06:05.555 --> 00:06:06.605
<00:06:05.555>with <00:06:05.870>pattern <00:06:06.185>number <00:06:06.500>two,

133
00:06:06.605 --> 00:06:08.125
<00:06:06.605>which <00:06:06.947>is <00:06:07.289>conditional <00:06:07.631>pipeline <00:06:07.973>steps.

134
00:06:08.825 --> 00:06:10.685
<00:06:08.825>So <00:06:09.000>if <00:06:09.175>we <00:06:09.349>look <00:06:09.525>at <00:06:09.700>the <00:06:09.875>PR <00:06:10.050>pipeline, <00:06:10.224>again,

135
00:06:11.145 --> 00:06:13.565
<00:06:11.145>we <00:06:11.284>run <00:06:11.424>the <00:06:11.565>backend <00:06:11.705>tests, <00:06:11.844>we <00:06:11.984>run <00:06:12.125>the <00:06:12.265>front <00:06:12.405>end <00:06:12.544>tests,

136
00:06:13.625 --> 00:06:15.005
<00:06:13.625>and <00:06:13.873>we <00:06:14.121>run <00:06:14.370>the <00:06:14.618>integration <00:06:14.867>tests.

137
00:06:16.385 --> 00:06:18.405
<00:06:16.385>But <00:06:16.540>what <00:06:16.696>if <00:06:16.851>you <00:06:17.007>change <00:06:17.162>something <00:06:17.318>on <00:06:17.473>the <00:06:17.629>frontend <00:06:17.784>only

138
00:06:19.425 --> 00:06:21.445
<00:06:19.425>you <00:06:19.658>make <00:06:19.891>a <00:06:20.125>a, <00:06:20.358>a <00:06:20.591>small <00:06:20.825>change.

139
00:06:21.445 --> 00:06:23.805
<00:06:21.445>Let's <00:06:21.620>say <00:06:21.795>we <00:06:21.969>have <00:06:22.145>a <00:06:22.320>PR <00:06:22.495>that <00:06:22.670>all <00:06:22.844>the,

140
00:06:23.825 --> 00:06:25.805
<00:06:23.825>the <00:06:23.980>settings <00:06:24.136>menu <00:06:24.291>was <00:06:24.447>still <00:06:24.602>visible <00:06:24.758>when <00:06:24.913>you <00:06:25.069>logged <00:06:25.224>out.

141
00:06:25.825 --> 00:06:27.165
<00:06:25.825>So <00:06:26.026>we <00:06:26.227>changed <00:06:26.428>that. <00:06:26.629>We <00:06:26.830>fixed <00:06:27.031>that.

142
00:06:27.555 --> 00:06:28.925
<00:06:27.555>It's <00:06:27.863>a <00:06:28.171>pure <00:06:28.479>frontend <00:06:28.788>change.

143
00:06:29.235 --> 00:06:31.205
<00:06:29.235>There's <00:06:29.435>no <00:06:29.635>need <00:06:29.835>to <00:06:30.035>run <00:06:30.235>the <00:06:30.435>backend <00:06:30.635>lint

144
00:06:31.205 --> 00:06:33.125
<00:06:31.205>and <00:06:31.405>the <00:06:31.604>backend <00:06:31.805>tests <00:06:32.005>because <00:06:32.205>those <00:06:32.405>haven't <00:06:32.604>changed.

145
00:06:33.235 --> 00:06:36.645
<00:06:33.235>They <00:06:33.515>can't <00:06:33.795>fail <00:06:34.075>unless <00:06:34.355>they're <00:06:34.635>flaky.

146
00:06:36.665 --> 00:06:37.725
<00:06:36.665>And <00:06:36.824>then <00:06:36.983>you <00:06:37.142>have <00:06:37.301>a <00:06:37.460>different <00:06:37.619>problem.

147
00:06:38.625 --> 00:06:39.925
<00:06:38.625>Uh, <00:06:38.820>and <00:06:39.015>the <00:06:39.210>same <00:06:39.405>with <00:06:39.600>the <00:06:39.795>backend.

148
00:06:39.925 --> 00:06:44.165
<00:06:39.925>If <00:06:40.080>we <00:06:40.236>add <00:06:40.391>a <00:06:40.547>new <00:06:40.702>database <00:06:40.858>index, <00:06:41.013>no, <00:06:41.169>no, <00:06:41.325>uh,

149
00:06:44.525 --> 00:06:46.165
<00:06:44.525>functionality <00:06:44.758>has <00:06:44.991>changed <00:06:45.224>in <00:06:45.458>the <00:06:45.691>front <00:06:45.924>end.

150
00:06:46.425 --> 00:06:48.125
<00:06:46.425>So <00:06:46.625>there's <00:06:46.825>no <00:06:47.025>need <00:06:47.225>to <00:06:47.425>run <00:06:47.625>the <00:06:47.825>lint

151
00:06:48.125 --> 00:06:49.445
<00:06:48.125>or <00:06:48.362>the <00:06:48.600>front <00:06:48.837>end <00:06:49.075>tests <00:06:49.313>anymore.

152
00:06:49.865 --> 00:06:51.365
<00:06:49.865>So <00:06:50.090>we <00:06:50.315>just <00:06:50.540>run <00:06:50.765>the <00:06:50.990>backend <00:06:51.215>tests.

153
00:06:52.545 --> 00:06:55.165
<00:06:52.545>And <00:06:52.778>you <00:06:53.011>can <00:06:53.245>achieve <00:06:53.478>this <00:06:53.711>in <00:06:53.945>different

154
00:06:55.165 --> 00:06:56.445
<00:06:55.165>ways <00:06:55.549>on <00:06:55.933>different <00:06:56.317>platforms.

155
00:06:56.825 --> 00:06:58.485
<00:06:56.825>I'm <00:06:57.104>gonna <00:06:57.385>show <00:06:57.664>an <00:06:57.945>example <00:06:58.224>of

156
00:06:58.485 --> 00:07:00.165
<00:06:58.485>how <00:06:58.718>we <00:06:58.951>do <00:06:59.185>this <00:06:59.418>on <00:06:59.651>GitHub <00:06:59.885>actions

157
00:07:00.345 --> 00:07:01.925
<00:07:00.345>or <00:07:00.520>how <00:07:00.695>you <00:07:00.870>can <00:07:01.045>do <00:07:01.220>this <00:07:01.395>on <00:07:01.570>GitHub <00:07:01.745>actions.

158
00:07:01.925 --> 00:07:03.405
<00:07:01.925>There <00:07:02.147>are <00:07:02.369>several <00:07:02.591>ways <00:07:02.813>of <00:07:03.034>doing <00:07:03.256>this

159
00:07:03.585 --> 00:07:04.645
<00:07:03.585>on <00:07:03.823>GitHub <00:07:04.061>actions <00:07:04.300>as <00:07:04.539>well.

160
00:07:05.785 --> 00:07:07.845
<00:07:05.785>Uh, <00:07:05.985>so <00:07:06.185>this <00:07:06.385>is <00:07:06.585>a <00:07:06.785>short <00:07:06.985>snippet, <00:07:07.185>unfortunately,

161
00:07:08.705 --> 00:07:10.045
<00:07:08.705>you <00:07:08.946>can <00:07:09.187>see <00:07:09.428>what's <00:07:09.669>down <00:07:09.911>there

162
00:07:10.045 --> 00:07:11.245
<00:07:10.045>because <00:07:10.261>I'm <00:07:10.477>in <00:07:10.693>the <00:07:10.909>way <00:07:11.125>apparently.

163
00:07:12.185 --> 00:07:15.445
<00:07:12.185>Uh, <00:07:12.340>but <00:07:12.496>that's <00:07:12.651>the <00:07:12.807>least <00:07:12.962>interesting <00:07:13.118>part. <00:07:13.273>So <00:07:13.429>no <00:07:13.585>worries.

164
00:07:16.625 --> 00:07:20.845
<00:07:16.625>So <00:07:16.752>what <00:07:16.879>we <00:07:17.006>have <00:07:17.134>here <00:07:17.261>is <00:07:17.388>we're <00:07:17.515>using <00:07:17.643>a <00:07:17.770>job, <00:07:17.897>a <00:07:18.025>pre-job

165
00:07:20.905 --> 00:07:22.125
<00:07:20.905>before <00:07:21.179>we <00:07:21.454>build <00:07:21.728>a <00:07:22.003>pipeline

166
00:07:22.715 --> 00:07:26.325
<00:07:22.715>that <00:07:22.854>uses <00:07:22.994>an <00:07:23.135>action <00:07:23.275>from <00:07:23.414>someone <00:07:23.554>called <00:07:23.695>Ney, <00:07:23.835>which <00:07:23.974>sets <00:07:24.114>up

167
00:07:27.415 --> 00:07:29.925
<00:07:27.415>components <00:07:28.115>and <00:07:28.815>expressions.

168
00:07:30.345 --> 00:07:33.885
<00:07:30.345>So <00:07:30.625>these <00:07:30.905>patterns <00:07:31.185>up <00:07:31.465>here, <00:07:31.745>uh,

169
00:07:34.135 --> 00:07:35.365
<00:07:34.135>there <00:07:34.504>are <00:07:34.873>glob <00:07:35.242>expressions

170
00:07:35.365 --> 00:07:38.685
<00:07:35.365>that <00:07:35.505>tell <00:07:35.645>if <00:07:35.785>any <00:07:35.925>file <00:07:36.065>in <00:07:36.205>the <00:07:36.345>backend <00:07:36.485>directory <00:07:36.625>has <00:07:36.765>changed,

171
00:07:38.995 --> 00:07:40.525
<00:07:38.995>then <00:07:39.270>we <00:07:39.545>consider <00:07:39.821>the <00:07:40.096>backend <00:07:40.371>changed.

172
00:07:40.665 --> 00:07:42.485
<00:07:40.665>So <00:07:40.898>it <00:07:41.131>sets <00:07:41.365>an <00:07:41.598>output <00:07:41.831>to <00:07:42.065>true

173
00:07:43.065 --> 00:07:44.565
<00:07:43.065>the <00:07:43.402>Boolean <00:07:43.740>backend <00:07:44.077>becomes <00:07:44.415>true.

174
00:07:44.985 --> 00:07:46.285
<00:07:44.985>And <00:07:45.131>the <00:07:45.277>same <00:07:45.423>for <00:07:45.570>the <00:07:45.716>front <00:07:45.862>end. <00:07:46.008>If <00:07:46.155>any

175
00:07:46.425 --> 00:07:48.565
<00:07:46.425>of <00:07:46.580>the <00:07:46.736>files <00:07:46.891>in <00:07:47.047>the <00:07:47.202>front <00:07:47.358>end <00:07:47.513>directory <00:07:47.669>has <00:07:47.825>changed,

176
00:07:48.825 --> 00:07:50.325
<00:07:48.825>we <00:07:49.050>set <00:07:49.275>the <00:07:49.500>frontend <00:07:49.724>bullion <00:07:49.950>to <00:07:50.175>true

177
00:07:51.825 --> 00:07:53.565
<00:07:51.825>and <00:07:52.025>then <00:07:52.224>we <00:07:52.425>export <00:07:52.625>them <00:07:52.825>outta <00:07:53.025>the <00:07:53.224>job.

178
00:07:53.565 --> 00:07:54.965
<00:07:53.565>Because <00:07:53.745>those <00:07:53.925>are <00:07:54.105>only <00:07:54.285>set <00:07:54.465>on <00:07:54.645>a <00:07:54.825>step.

179
00:07:55.945 --> 00:07:58.485
<00:07:55.945>And <00:07:56.085>now <00:07:56.224>we <00:07:56.365>can <00:07:56.505>use <00:07:56.645>this <00:07:56.784>in <00:07:56.925>our <00:07:57.065>PR <00:07:57.205>pipeline <00:07:57.344>here.

180
00:07:58.505 --> 00:08:02.005
<00:07:58.505>So <00:07:58.632>we <00:07:58.759>say <00:07:58.886>that <00:07:59.014>our <00:07:59.141>PR <00:07:59.268>pipeline, <00:07:59.395>it <00:07:59.523>needs <00:07:59.650>the <00:07:59.777>filter <00:07:59.905>job.

181
00:08:02.905 --> 00:08:04.205
<00:08:02.905>So <00:08:03.099>it <00:08:03.294>runs <00:08:03.489>after <00:08:03.685>the <00:08:03.880>filter <00:08:04.075>job.

182
00:08:04.865 --> 00:08:09.605
<00:08:04.865>And <00:08:04.992>then <00:08:05.119>down <00:08:05.246>here <00:08:05.374>we <00:08:05.501>can <00:08:05.628>see <00:08:05.755>it, <00:08:05.883>you, <00:08:06.010>oh, <00:08:06.137>look, <00:08:06.265>that

183
00:08:10.585 --> 00:08:12.685
<00:08:10.585>we <00:08:10.864>need <00:08:11.145>the <00:08:11.424>path <00:08:11.705>filter <00:08:11.984>outputs.

184
00:08:12.785 --> 00:08:15.925
<00:08:12.785>And <00:08:12.925>if <00:08:13.065>the <00:08:13.205>backend <00:08:13.345>is <00:08:13.485>true, <00:08:13.625>we <00:08:13.765>run <00:08:13.905>the <00:08:14.045>backend <00:08:14.185>lint.

185
00:08:16.905 --> 00:08:19.845
<00:08:16.905>So <00:08:17.060>only <00:08:17.216>if <00:08:17.371>files <00:08:17.527>have <00:08:17.682>changed <00:08:17.838>in <00:08:17.993>the <00:08:18.149>backend <00:08:18.304>directory,

186
00:08:20.305 --> 00:08:22.285
<00:08:20.305>we <00:08:20.480>run <00:08:20.655>the <00:08:20.830>backend <00:08:21.005>lint, <00:08:21.180>otherwise <00:08:21.355>we <00:08:21.530>skip <00:08:21.705>it.

187
00:08:22.945 --> 00:08:25.845
<00:08:22.945>And <00:08:23.061>you <00:08:23.178>can <00:08:23.295>do <00:08:23.411>this <00:08:23.528>with <00:08:23.645>all <00:08:23.761>your, <00:08:23.878>your <00:08:23.995>steps <00:08:24.111>to <00:08:24.228>make <00:08:24.344>sure

188
00:08:27.115 --> 00:08:29.085
<00:08:27.115>that <00:08:27.348>you <00:08:27.581>only <00:08:27.815>run <00:08:28.048>the <00:08:28.281>necessary <00:08:28.515>steps

189
00:08:29.505 --> 00:08:31.845
<00:08:29.505>to <00:08:29.738>save <00:08:29.971>your <00:08:30.205>time <00:08:30.438>and <00:08:30.671>the <00:08:30.905>environment.

190
00:08:33.225 --> 00:08:36.245
<00:08:33.225>All <00:08:33.425>right? <00:08:33.625>Pattern <00:08:33.825>number, <00:08:34.025>anti <00:08:34.225>pattern <00:08:34.425>number <00:08:34.625>two,

191
00:08:36.245 --> 00:08:39.285
<00:08:36.245>hoarding, <00:08:36.419>which <00:08:36.595>is <00:08:36.770>all <00:08:36.945>these <00:08:37.120>artifacts <00:08:37.294>that <00:08:37.470>we <00:08:37.645>build.

192
00:08:40.345 --> 00:08:42.565
<00:08:40.345>Uh, <00:08:40.520>even <00:08:40.695>if <00:08:40.870>we <00:08:41.045>don't <00:08:41.220>build <00:08:41.395>them <00:08:41.570>on <00:08:41.745>PRS

193
00:08:42.565 --> 00:08:45.365
<00:08:42.565>or <00:08:42.705>on <00:08:42.845>night <00:08:42.985>lease, <00:08:43.125>we <00:08:43.265>usually <00:08:43.405>build <00:08:43.545>them <00:08:43.685>off <00:08:43.825>the <00:08:43.965>merge.

194
00:08:45.585 --> 00:08:47.405
<00:08:45.585>But <00:08:45.818>we <00:08:46.051>probably <00:08:46.285>don't <00:08:46.518>need <00:08:46.751>all <00:08:46.985>those

195
00:08:47.405 --> 00:08:48.605
<00:08:47.405>artifacts <00:08:47.944>hanging <00:08:48.485>around.

196
00:08:49.225 --> 00:08:50.485
<00:08:49.225>It <00:08:49.508>takes <00:08:49.792>up <00:08:50.075>storage <00:08:50.359>base.

197
00:08:50.825 --> 00:08:53.445
<00:08:50.825>And <00:08:51.025>if <00:08:51.225>you're <00:08:51.425>running <00:08:51.625>on <00:08:51.825>premises, <00:08:52.025>that <00:08:52.225>means

198
00:08:53.445 --> 00:08:55.605
<00:08:53.445>that <00:08:53.645>someone <00:08:53.845>needs <00:08:54.045>to <00:08:54.245>buy <00:08:54.445>new <00:08:54.645>hard <00:08:54.845>drives.

199
00:08:56.145 --> 00:08:58.245
<00:08:56.145>Put <00:08:56.300>them <00:08:56.456>into <00:08:56.611>your <00:08:56.767>servers <00:08:56.922>so <00:08:57.078>you <00:08:57.233>can <00:08:57.389>store <00:08:57.545>more

200
00:08:58.385 --> 00:09:00.925
<00:08:58.385>of <00:08:58.540>your <00:08:58.696>artifacts <00:08:58.851>that <00:08:59.007>you're <00:08:59.162>probably <00:08:59.318>not <00:08:59.473>even <00:08:59.629>looking <00:08:59.785>at.

201
00:09:02.465 --> 00:09:04.925
<00:09:02.465>Uh, <00:09:02.620>and <00:09:02.776>if <00:09:02.931>you're <00:09:03.087>using <00:09:03.242>some <00:09:03.398>sort <00:09:03.553>of <00:09:03.709>cloud <00:09:03.865>provider,

202
00:09:05.225 --> 00:09:09.005
<00:09:05.225>say <00:09:05.380>GitHub, <00:09:05.536>they <00:09:05.691>just <00:09:05.847>amass <00:09:06.002>somewhere <00:09:06.158>in <00:09:06.313>a <00:09:06.469>page <00:09:06.625>somewhere.

203
00:09:09.705 --> 00:09:12.445
<00:09:09.705>Uh, <00:09:09.905>now <00:09:10.105>this <00:09:10.305>is <00:09:10.505>a <00:09:10.705>open <00:09:10.905>source <00:09:11.105>project.

204
00:09:12.795 --> 00:09:14.245
<00:09:12.795>They <00:09:13.230>build <00:09:13.665>docker <00:09:14.100>images.

205
00:09:15.385 --> 00:09:18.285
<00:09:15.385>Uh, <00:09:15.560>I <00:09:15.735>took <00:09:15.910>the <00:09:16.085>screenshot <00:09:16.260>in <00:09:16.435>March <00:09:16.610>this <00:09:16.785>year.

206
00:09:18.325 --> 00:09:21.725
<00:09:18.325>I <00:09:18.465>think <00:09:18.605>they <00:09:18.745>were <00:09:18.885>up <00:09:19.025>to <00:09:19.165>over <00:09:19.305>7,000 <00:09:19.445>tagged <00:09:19.585>Docker <00:09:19.725>images.

207
00:09:23.095 --> 00:09:25.665
<00:09:23.095>They <00:09:23.270>probably <00:09:23.445>build <00:09:23.620>a <00:09:23.795>docker <00:09:23.970>image <00:09:24.145>on <00:09:24.320>every <00:09:24.495>merge,

208
00:09:25.665 --> 00:09:28.705
<00:09:25.665>every <00:09:25.805>pr <00:09:25.944>save <00:09:26.084>it <00:09:26.224>in <00:09:26.365>the <00:09:26.505>repository <00:09:26.645>and <00:09:26.785>forget <00:09:26.925>about <00:09:27.064>them.

209
00:09:29.005 --> 00:09:32.585
<00:09:29.005>So <00:09:29.160>this <00:09:29.316>is <00:09:29.471>a <00:09:29.627>few <00:09:29.782>terabytes <00:09:29.938>of <00:09:30.093>space <00:09:30.249>completely <00:09:30.405>wasted.

210
00:09:32.925 --> 00:09:34.905
<00:09:32.925>No <00:09:33.080>one's <00:09:33.236>looking <00:09:33.391>at <00:09:33.547>them, <00:09:33.702>no <00:09:33.858>one's <00:09:34.013>pulling <00:09:34.169>these <00:09:34.324>images.

211
00:09:37.375 --> 00:09:39.315
<00:09:37.375>Uh, <00:09:37.575>you <00:09:37.775>can <00:09:37.975>see <00:09:38.175>here, <00:09:38.375>it's, <00:09:38.575>they've, <00:09:38.775>all

212
00:09:39.315 --> 00:09:41.235
<00:09:39.315>of <00:09:39.548>them <00:09:39.781>has <00:09:40.015>been <00:09:40.248>pulled <00:09:40.481>211 <00:09:40.715>times.

213
00:09:42.015 --> 00:09:44.475
<00:09:42.015>It <00:09:42.189>kind <00:09:42.365>of <00:09:42.540>implies <00:09:42.715>that <00:09:42.890>something <00:09:43.064>automated <00:09:43.240>touches <00:09:43.415>them

214
00:09:44.495 --> 00:09:45.715
<00:09:44.495>and <00:09:44.714>then <00:09:44.934>never <00:09:45.153>touches <00:09:45.373>them <00:09:45.593>again.

215
00:09:46.545 --> 00:09:48.435
<00:09:46.545>They <00:09:46.778>can <00:09:47.011>probably <00:09:47.245>remove <00:09:47.478>after <00:09:47.711>a <00:09:47.944>week.

216
00:09:49.655 --> 00:09:51.315
<00:09:49.655>Uh, <00:09:49.855>this <00:09:50.055>takes <00:09:50.255>up <00:09:50.454>a <00:09:50.655>lot <00:09:50.855>of <00:09:51.055>space.

217
00:09:51.695 --> 00:09:55.355
<00:09:51.695>But <00:09:51.850>also, <00:09:52.006>and <00:09:52.161>this <00:09:52.317>might <00:09:52.472>be <00:09:52.628>a <00:09:52.783>problem <00:09:52.939>with <00:09:53.095>GitHub,

218
00:09:55.895 --> 00:09:58.635
<00:09:55.895>but <00:09:56.095>it <00:09:56.295>gets <00:09:56.495>worse <00:09:56.694>that <00:09:56.895>if <00:09:57.095>you're <00:09:57.295>looking

219
00:09:58.655 --> 00:10:00.995
<00:09:58.655>for <00:09:58.855>a <00:09:59.055>specific <00:09:59.255>image, <00:09:59.454>you <00:09:59.655>can't <00:09:59.855>search <00:10:00.055>here.

220
00:10:01.415 --> 00:10:05.475
<00:10:01.415>You <00:10:01.589>have <00:10:01.765>to <00:10:01.939>browse <00:10:02.115>through <00:10:02.290>67 <00:10:02.464>pages <00:10:02.640>of <00:10:02.814>images

221
00:10:06.105 --> 00:10:08.035
<00:10:06.105>with <00:10:06.280>tags <00:10:06.455>like <00:10:06.630>this <00:10:06.805>before <00:10:06.980>you <00:10:07.155>can <00:10:07.330>find <00:10:07.505>the

222
00:10:08.035 --> 00:10:09.195
<00:10:08.035>image <00:10:08.295>you're <00:10:08.557>actually <00:10:08.818>looking <00:10:09.079>for.

223
00:10:10.495 --> 00:10:13.235
<00:10:10.495>So <00:10:10.695>please <00:10:10.895>remove <00:10:11.095>the <00:10:11.295>stuff <00:10:11.495>you <00:10:11.695>don't <00:10:11.895>need.

224
00:10:13.775 --> 00:10:16.275
<00:10:13.775>Set <00:10:14.125>expirations, <00:10:14.475>have <00:10:14.824>automated <00:10:15.175>cleanup.

225
00:10:16.975 --> 00:10:18.195
<00:10:16.975>Uh, <00:10:17.249>do <00:10:17.524>yourselves <00:10:17.798>a <00:10:18.073>favor

226
00:10:18.575 --> 00:10:22.115
<00:10:18.575>and <00:10:18.775>the <00:10:18.975>environment, <00:10:19.175>uh, <00:10:19.375>ante <00:10:19.575>pattern <00:10:19.775>number <00:10:19.975>three.

227
00:10:22.115 --> 00:10:26.435
<00:10:22.115>Then <00:10:22.255>the <00:10:22.395>aesthetic, <00:10:22.535>which <00:10:22.675>is <00:10:22.815>when <00:10:22.955>we <00:10:23.095>use <00:10:23.235>a <00:10:23.375>natural <00:10:23.515>order

228
00:10:26.435 --> 00:10:29.475
<00:10:26.435>of <00:10:26.609>steps <00:10:26.785>instead <00:10:26.959>of <00:10:27.135>the <00:10:27.310>logical <00:10:27.484>order <00:10:27.660>of <00:10:27.834>steps.

229
00:10:30.215 --> 00:10:33.075
<00:10:30.215>Uh, <00:10:30.331>I <00:10:30.448>fall <00:10:30.565>for <00:10:30.681>this <00:10:30.798>all <00:10:30.915>the <00:10:31.031>time. <00:10:31.148>When <00:10:31.265>I <00:10:31.381>set <00:10:31.498>new <00:10:31.615>pipelines.

230
00:10:33.455 --> 00:10:35.075
<00:10:33.455>Uh, <00:10:33.655>my <00:10:33.855>pipelines <00:10:34.055>tend <00:10:34.255>to <00:10:34.455>look <00:10:34.655>like <00:10:34.855>this.

231
00:10:35.775 --> 00:10:39.555
<00:10:35.775>We <00:10:35.902>do <00:10:36.029>some <00:10:36.156>setup, <00:10:36.284>we <00:10:36.411>do <00:10:36.538>some <00:10:36.665>linting. <00:10:36.793>We <00:10:36.920>compile <00:10:37.047>the <00:10:37.175>code.

232
00:10:39.955 --> 00:10:40.995
<00:10:39.955>'cause <00:10:40.189>after <00:10:40.423>we <00:10:40.657>linted <00:10:40.891>it,

233
00:10:41.095 --> 00:10:42.475
<00:10:41.095>now <00:10:41.302>we're <00:10:41.509>okay <00:10:41.716>to <00:10:41.923>compile <00:10:42.130>it, <00:10:42.337>right?

234
00:10:42.815 --> 00:10:45.475
<00:10:42.815>We <00:10:42.955>do <00:10:43.095>the <00:10:43.235>unit <00:10:43.375>tests. <00:10:43.515>These, <00:10:43.655>those <00:10:43.795>are <00:10:43.935>kind <00:10:44.075>of <00:10:44.215>sheep.

235
00:10:45.625 --> 00:10:48.115
<00:10:45.625>They <00:10:45.800>run <00:10:45.975>quickly. <00:10:46.150>We <00:10:46.325>then <00:10:46.500>do <00:10:46.675>the <00:10:46.850>integration <00:10:47.025>test,

236
00:10:48.135 --> 00:10:49.635
<00:10:48.135>and <00:10:48.360>then <00:10:48.585>we <00:10:48.810>do <00:10:49.035>the <00:10:49.260>end-to-end <00:10:49.485>tests.

237
00:10:49.985 --> 00:10:52.395
<00:10:49.985>Basically, <00:10:50.185>we <00:10:50.385>execute <00:10:50.585>the <00:10:50.785>tests <00:10:50.985>in <00:10:51.185>the <00:10:51.385>order,

238
00:10:52.785 --> 00:10:54.315
<00:10:52.785>they <00:10:53.060>come <00:10:53.335>in <00:10:53.611>the <00:10:53.886>testing <00:10:54.162>pyramid.

239
00:10:56.535 --> 00:10:58.115
<00:10:56.535>But <00:10:57.001>when <00:10:57.468>I <00:10:57.935>develop

240
00:10:58.255 --> 00:10:59.395
<00:10:58.255>and <00:10:58.511>when <00:10:58.768>my <00:10:59.024>colleagues <00:10:59.281>develop,

241
00:10:59.815 --> 00:11:01.075
<00:10:59.815>we <00:11:00.098>do <00:11:00.382>test <00:11:00.665>driven <00:11:00.949>development.

242
00:11:01.615 --> 00:11:03.555
<00:11:01.615>So <00:11:01.790>we <00:11:01.965>run <00:11:02.140>the <00:11:02.315>unit <00:11:02.490>tests <00:11:02.665>all <00:11:02.840>the <00:11:03.015>time.

243
00:11:04.335 --> 00:11:07.595
<00:11:04.335>So <00:11:04.490>the <00:11:04.646>unit <00:11:04.801>tests <00:11:04.957>in <00:11:05.112>the <00:11:05.268>pipeline <00:11:05.423>essentially <00:11:05.579>never <00:11:05.735>fails.

244
00:11:08.555 --> 00:11:09.795
<00:11:08.555>'cause <00:11:08.741>that's <00:11:08.926>how <00:11:09.113>we <00:11:09.299>develop <00:11:09.485>a <00:11:09.670>software.

245
00:11:10.895 --> 00:11:12.675
<00:11:10.895>We <00:11:11.095>usually <00:11:11.295>run <00:11:11.495>the <00:11:11.694>integration <00:11:11.895>test <00:11:12.095>as <00:11:12.295>well.

246
00:11:12.855 --> 00:11:14.355
<00:11:12.855>But <00:11:13.047>if <00:11:13.240>we <00:11:13.433>forget <00:11:13.626>to <00:11:13.819>run <00:11:14.012>any <00:11:14.205>test,

247
00:11:14.585 --> 00:11:16.115
<00:11:14.585>it's <00:11:14.929>usually <00:11:15.273>the <00:11:15.617>integration <00:11:15.962>test.

248
00:11:16.175 --> 00:11:19.515
<00:11:16.175>We <00:11:16.330>don't <00:11:16.486>run <00:11:16.641>all <00:11:16.797>the <00:11:16.952>integration <00:11:17.108>tests <00:11:17.263>because <00:11:17.419>they're <00:11:17.574>slow.

249
00:11:19.515 --> 00:11:21.715
<00:11:19.515>They <00:11:19.748>take <00:11:19.981>time. <00:11:20.215>We <00:11:20.448>wanna <00:11:20.681>go <00:11:20.915>fast.

250
00:11:22.975 --> 00:11:25.675
<00:11:22.975>So <00:11:23.175>if <00:11:23.375>we <00:11:23.575>have <00:11:23.775>an <00:11:23.975>integration <00:11:24.175>test <00:11:24.375>failure,

251
00:11:25.675 --> 00:11:28.395
<00:11:25.675>which <00:11:25.849>is <00:11:26.025>the <00:11:26.199>most <00:11:26.375>common <00:11:26.550>failure <00:11:26.724>in <00:11:26.900>my <00:11:27.074>pipelines,

252
00:11:29.015 --> 00:11:31.475
<00:11:29.015>we <00:11:29.170>get <00:11:29.326>this <00:11:29.481>failure <00:11:29.637>after <00:11:29.792>13 <00:11:29.948>minutes <00:11:30.103>and <00:11:30.259>37 <00:11:30.415>seconds

253
00:11:32.305 --> 00:11:34.795
<00:11:32.305>because <00:11:32.479>we <00:11:32.655>do <00:11:32.829>the <00:11:33.005>linting <00:11:33.180>compiling <00:11:33.354>in <00:11:33.530>unit <00:11:33.704>tests.

254
00:11:35.455 --> 00:11:38.475
<00:11:35.455>But <00:11:35.735>if <00:11:36.015>we <00:11:36.295>reorder <00:11:36.575>the <00:11:36.855>steps

255
00:11:39.015 --> 00:11:43.075
<00:11:39.015>to <00:11:39.170>run <00:11:39.326>the <00:11:39.481>integration <00:11:39.637>test <00:11:39.792>as <00:11:39.948>quickly <00:11:40.103>as <00:11:40.259>possible, <00:11:40.415>uh,

256
00:11:43.375 --> 00:11:45.275
<00:11:43.375>we <00:11:43.530>can <00:11:43.686>get <00:11:43.841>our <00:11:43.997>test <00:11:44.152>failure <00:11:44.308>down <00:11:44.463>to <00:11:44.619>two <00:11:44.775>minutes.

257
00:11:45.935 --> 00:11:47.635
<00:11:45.935>So <00:11:46.135>now <00:11:46.334>we <00:11:46.535>get <00:11:46.734>feedback <00:11:46.935>three <00:11:47.135>minutes <00:11:47.334>earlier,

258
00:11:48.255 --> 00:11:49.395
<00:11:48.255>and <00:11:48.460>we <00:11:48.665>can <00:11:48.870>do <00:11:49.075>the <00:11:49.281>linting

259
00:11:49.495 --> 00:11:51.595
<00:11:49.495>and <00:11:49.695>the <00:11:49.895>unit <00:11:50.095>test <00:11:50.295>and <00:11:50.495>end-to-end <00:11:50.695>tests <00:11:50.895>later.

260
00:11:52.095 --> 00:11:54.765
<00:11:52.095>And <00:11:52.235>we <00:11:52.375>also <00:11:52.515>run <00:11:52.655>the <00:11:52.795>end-to-end <00:11:52.935>tests <00:11:53.075>before <00:11:53.215>the <00:11:53.355>unit <00:11:53.495>tests,

261
00:11:54.955 --> 00:11:58.605
<00:11:54.955>because <00:11:55.155>those <00:11:55.355>are <00:11:55.555>the <00:11:55.755>second <00:11:55.955>most <00:11:56.155>common <00:11:56.355>failure

262
00:12:02.515 --> 00:12:05.575
<00:12:02.515>Antifa <00:12:02.748>number <00:12:02.981>four, <00:12:03.215>uh, <00:12:03.448>the <00:12:03.681>one <00:12:03.915>pipeline,

263
00:12:05.955 --> 00:12:07.215
<00:12:05.955>one <00:12:06.181>pipeline <00:12:06.408>to <00:12:06.635>rule <00:12:06.862>them <00:12:07.089>all.

264
00:12:08.315 --> 00:12:10.975
<00:12:08.315>Uh, <00:12:08.490>and <00:12:08.665>I <00:12:08.840>wasted <00:12:09.015>some <00:12:09.190>environment <00:12:09.365>by <00:12:09.540>having <00:12:09.715>chat.

265
00:12:11.095 --> 00:12:13.775
<00:12:11.095>GPT <00:12:11.328>generate <00:12:11.561>this <00:12:11.795>as <00:12:12.028>image. <00:12:12.261>I'm <00:12:12.495>sorry.

266
00:12:15.475 --> 00:12:17.175
<00:12:15.475>Uh, <00:12:15.675>this <00:12:15.875>is <00:12:16.075>where <00:12:16.275>we <00:12:16.475>have <00:12:16.675>one <00:12:16.875>pipeline,

267
00:12:17.285 --> 00:12:18.335
<00:12:17.285>just <00:12:17.600>the <00:12:17.915>one <00:12:18.230>pipeline.

268
00:12:18.365 --> 00:12:23.305
<00:12:18.365>There's <00:12:18.645>everything. <00:12:18.925>And <00:12:19.205>this <00:12:19.485>is <00:12:19.765>the,

269
00:12:23.615 --> 00:12:27.665
<00:12:23.615>this <00:12:23.790>is <00:12:23.965>a <00:12:24.140>pipeline <00:12:24.315>for <00:12:24.490>the, <00:12:24.665>uh, <00:12:24.840>cargo <00:12:25.015>site

270
00:12:27.665 --> 00:12:29.745
<00:12:27.665>where <00:12:27.898>rust <00:12:28.131>downloads <00:12:28.365>all <00:12:28.598>their <00:12:28.831>dependencies <00:12:29.064>from,

271
00:12:31.425 --> 00:12:32.505
<00:12:31.425>they <00:12:31.546>have <00:12:31.668>a <00:12:31.789>front <00:12:31.911>end <00:12:32.032>and <00:12:32.154>the <00:12:32.275>back <00:12:32.396>end.

272
00:12:32.505 --> 00:12:34.625
<00:12:32.505>So <00:12:32.680>we <00:12:32.855>run <00:12:33.030>the <00:12:33.205>backend <00:12:33.380>linting, <00:12:33.555>then <00:12:33.730>the <00:12:33.905>profile,

273
00:12:34.625 --> 00:12:36.945
<00:12:34.625>then <00:12:34.741>the <00:12:34.858>tests, <00:12:34.975>and <00:12:35.091>then <00:12:35.208>we <00:12:35.325>do <00:12:35.441>the <00:12:35.558>same <00:12:35.675>for <00:12:35.791>the <00:12:35.908>front <00:12:36.025>end.

274
00:12:37.245 --> 00:12:39.025
<00:12:37.245>And <00:12:37.400>then <00:12:37.556>we <00:12:37.711>run <00:12:37.867>the <00:12:38.022>integration <00:12:38.178>tests <00:12:38.333>at <00:12:38.489>the <00:12:38.645>end.

275
00:12:40.605 --> 00:12:42.825
<00:12:40.605>But <00:12:40.955>this <00:12:41.305>takes <00:12:41.655>24 <00:12:42.005>minutes

276
00:12:42.885 --> 00:12:45.785
<00:12:42.885>and <00:12:43.040>40 <00:12:43.196>seconds <00:12:43.351>to <00:12:43.507>run <00:12:43.662>slightly <00:12:43.818>less <00:12:43.973>than <00:12:44.129>25 <00:12:44.285>minutes.

277
00:12:46.525 --> 00:12:48.585
<00:12:46.525>Uh, <00:12:46.758>this <00:12:46.991>is <00:12:47.225>a <00:12:47.458>very <00:12:47.691>long <00:12:47.925>pipeline.

278
00:12:48.585 --> 00:12:51.065
<00:12:48.585>This <00:12:48.740>is <00:12:48.896>a <00:12:49.051>long <00:12:49.207>time <00:12:49.362>to <00:12:49.518>wait <00:12:49.673>to <00:12:49.829>get <00:12:49.985>feedback.

279
00:12:52.005 --> 00:12:53.465
<00:12:52.005>And <00:12:52.192>there <00:12:52.380>are <00:12:52.568>better <00:12:52.755>ways <00:12:52.943>of <00:12:53.131>doing <00:12:53.319>this.

280
00:12:54.645 --> 00:12:57.225
<00:12:54.645>So <00:12:54.819>if <00:12:54.995>we <00:12:55.170>look <00:12:55.345>at <00:12:55.520>the <00:12:55.694>parts <00:12:55.870>we <00:12:56.045>do

281
00:12:57.245 --> 00:12:59.985
<00:12:57.245>and <00:12:57.385>the <00:12:57.525>parts <00:12:57.665>we <00:12:57.805>touch, <00:12:57.945>we <00:12:58.085>can <00:12:58.225>see <00:12:58.365>that <00:12:58.505>the <00:12:58.645>front

282
00:12:59.985 --> 00:13:02.105
<00:12:59.985>and <00:13:00.265>the <00:13:00.545>backend, <00:13:00.825>they're <00:13:01.105>quite <00:13:01.385>independent.

283
00:13:02.245 --> 00:13:03.505
<00:13:02.245>We <00:13:02.434>need <00:13:02.623>them <00:13:02.812>both <00:13:03.001>for <00:13:03.190>integration <00:13:03.379>tests,

284
00:13:03.925 --> 00:13:06.305
<00:13:03.925>but <00:13:04.158>we <00:13:04.391>could <00:13:04.625>run <00:13:04.858>the <00:13:05.091>front <00:13:05.324>end

285
00:13:06.305 --> 00:13:09.465
<00:13:06.305>and <00:13:06.505>backend <00:13:06.704>compilation, <00:13:06.905>linting <00:13:07.104>and <00:13:07.305>tests <00:13:07.505>in <00:13:07.704>parallel.

286
00:13:10.005 --> 00:13:12.345
<00:13:10.005>So <00:13:10.471>instead <00:13:10.938>we, <00:13:11.405>uh,

287
00:13:12.725 --> 00:13:15.185
<00:13:12.725>use <00:13:13.005>pattern <00:13:13.285>number <00:13:13.565>four <00:13:13.845>parallel <00:13:14.125>pipelines.

288
00:13:16.605 --> 00:13:19.425
<00:13:16.605>We <00:13:16.760>run <00:13:16.916>the <00:13:17.071>backend <00:13:17.227>pipeline, <00:13:17.382>we <00:13:17.538>run <00:13:17.693>the <00:13:17.849>frontend <00:13:18.005>pipeline,

289
00:13:19.645 --> 00:13:21.585
<00:13:19.645>and <00:13:19.845>then <00:13:20.045>we <00:13:20.245>run <00:13:20.444>the <00:13:20.645>integration <00:13:20.845>test <00:13:21.045>pipeline.

290
00:13:21.885 --> 00:13:23.185
<00:13:21.885>So <00:13:22.177>the <00:13:22.470>integration <00:13:22.762>test <00:13:23.055>pipeline,

291
00:13:23.205 --> 00:13:26.425
<00:13:23.205>it <00:13:23.405>runs <00:13:23.605>the <00:13:23.805>backend <00:13:24.005>compilation, <00:13:24.205>the <00:13:24.405>frontend <00:13:24.605>compilation

292
00:13:26.645 --> 00:13:27.665
<00:13:26.645>and <00:13:26.951>the <00:13:27.257>integration <00:13:27.563>tests.

293
00:13:28.205 --> 00:13:30.465
<00:13:28.205>And <00:13:28.360>then <00:13:28.516>we <00:13:28.671>have <00:13:28.827>separate <00:13:28.982>pipelines <00:13:29.138>that <00:13:29.293>run <00:13:29.449>the <00:13:29.605>linting

294
00:13:30.565 --> 00:13:33.225
<00:13:30.565>and <00:13:30.692>the <00:13:30.819>unit <00:13:30.946>testing <00:13:31.074>for <00:13:31.201>the <00:13:31.328>back <00:13:31.455>end <00:13:31.583>of <00:13:31.710>the <00:13:31.837>front <00:13:31.965>end.

295
00:13:34.295 --> 00:13:38.145
<00:13:34.295>This <00:13:34.450>saves <00:13:34.606>us <00:13:34.761>nine <00:13:34.917>minutes, <00:13:35.072>almost <00:13:35.228>10 <00:13:35.383>minutes <00:13:35.539>of <00:13:35.694>time

296
00:13:38.565 --> 00:13:39.705
<00:13:38.565>before <00:13:38.821>we <00:13:39.078>get <00:13:39.334>to <00:13:39.591>failure.

297
00:13:40.565 --> 00:13:44.425
<00:13:40.565>But <00:13:40.798>we've <00:13:41.031>also <00:13:41.265>added <00:13:41.498>almost <00:13:41.731>eight <00:13:41.965>minutes

298
00:13:44.685 --> 00:13:48.665
<00:13:44.685>of <00:13:44.840>total <00:13:44.996>runtime <00:13:45.151>because <00:13:45.307>now <00:13:45.462>we're <00:13:45.618>doing <00:13:45.773>the <00:13:45.929>backend <00:13:46.084>setup.

299
00:13:48.805 --> 00:13:50.505
<00:13:48.805>The <00:13:49.084>backend <00:13:49.364>compile, <00:13:49.645>the <00:13:49.925>frontend <00:13:50.204>setup,

300
00:13:50.685 --> 00:13:52.545
<00:13:50.685>and <00:13:50.964>the <00:13:51.244>frontend <00:13:51.525>compile <00:13:51.805>two <00:13:52.084>times.

301
00:13:53.605 --> 00:13:54.625
<00:13:53.605>So <00:13:53.911>we're <00:13:54.217>wasting <00:13:54.523>time

302
00:13:56.045 --> 00:13:58.985
<00:13:56.045>and <00:13:56.245>we <00:13:56.444>can <00:13:56.645>decide <00:13:56.844>if <00:13:57.045>that's <00:13:57.245>worth <00:13:57.444>it.

303
00:13:59.305 --> 00:14:00.425
<00:13:59.305>I <00:13:59.506>mean, <00:13:59.708>we <00:13:59.909>get <00:14:00.111>faster <00:14:00.313>feedback.

304
00:14:00.805 --> 00:14:05.465
<00:14:00.805>We <00:14:00.944>waste <00:14:01.084>some <00:14:01.224>CPU <00:14:01.364>time, <00:14:01.505>some <00:14:01.645>money, <00:14:01.785>some <00:14:01.925>more, <00:14:02.064>uh, <00:14:02.204>CO2.

305
00:14:06.605 --> 00:14:08.145
<00:14:06.605>But <00:14:06.803>we <00:14:07.001>can <00:14:07.199>also <00:14:07.397>go <00:14:07.595>one <00:14:07.793>step <00:14:07.991>further.

306
00:14:08.285 --> 00:14:11.185
<00:14:08.285>We <00:14:08.518>can <00:14:08.751>make <00:14:08.985>the <00:14:09.218>integration <00:14:09.451>tests <00:14:09.685>depend

307
00:14:11.805 --> 00:14:13.385
<00:14:11.805>on <00:14:12.084>the <00:14:12.364>backend <00:14:12.645>and <00:14:12.925>frontend <00:14:13.204>pipeline.

308
00:14:14.285 --> 00:14:17.225
<00:14:14.285>So <00:14:14.440>instead <00:14:14.596>of <00:14:14.751>running <00:14:14.907>the <00:14:15.062>compilation <00:14:15.218>again, <00:14:15.373>we <00:14:15.529>just <00:14:15.685>say

309
00:14:17.225 --> 00:14:21.105
<00:14:17.225>that, <00:14:17.365>well, <00:14:17.505>after <00:14:17.645>we <00:14:17.785>run <00:14:17.925>the <00:14:18.065>tests, <00:14:18.205>we <00:14:18.345>publish <00:14:18.485>an <00:14:18.625>artifacts,

310
00:14:21.325 --> 00:14:23.505
<00:14:21.325>we <00:14:21.500>publish <00:14:21.675>the <00:14:21.850>front <00:14:22.025>end, <00:14:22.200>we <00:14:22.375>publish <00:14:22.550>the <00:14:22.725>backend,

311
00:14:23.925 --> 00:14:28.025
<00:14:23.925>we <00:14:24.041>run <00:14:24.158>a <00:14:24.275>new <00:14:24.391>job, <00:14:24.508>a <00:14:24.625>new <00:14:24.741>pipeline <00:14:24.858>that <00:14:24.974>takes <00:14:25.091>those <00:14:25.208>two <00:14:25.324>runs,

312
00:14:28.025 --> 00:14:29.185
<00:14:28.025>the <00:14:28.286>integration <00:14:28.546>tests <00:14:28.808>on <00:14:29.069>them.

313
00:14:29.765 --> 00:14:31.985
<00:14:29.765>And <00:14:30.115>it's <00:14:30.465>slightly, <00:14:30.814>slightly <00:14:31.165>slower.

314
00:14:32.895 --> 00:14:34.585
<00:14:32.895>It's, <00:14:33.175>uh, <00:14:33.454>around <00:14:33.735>a <00:14:34.015>minute <00:14:34.295>slower.

315
00:14:35.285 --> 00:14:39.185
<00:14:35.285>But <00:14:35.485>compared <00:14:35.685>to <00:14:35.885>the <00:14:36.084>naive, <00:14:36.285>the <00:14:36.485>one <00:14:36.685>pipeline,

316
00:14:39.605 --> 00:14:41.905
<00:14:39.605>we <00:14:39.838>only <00:14:40.071>added <00:14:40.305>16 <00:14:40.538>seconds <00:14:40.771>of <00:14:41.005>runtime.

317
00:14:42.845 --> 00:14:47.465
<00:14:42.845>But <00:14:43.125>we <00:14:43.405>saved <00:14:43.685>ourselves <00:14:43.965>eight <00:14:44.245>minutes

318
00:14:47.685 --> 00:14:51.285
<00:14:47.685>of <00:14:47.964>waiting, <00:14:48.244>which <00:14:48.525>is <00:14:48.805>really <00:14:49.084>good.

319
00:14:51.305 --> 00:14:52.605
<00:14:51.305>And <00:14:51.500>you <00:14:51.694>can <00:14:51.890>even <00:14:52.085>do <00:14:52.280>even <00:14:52.475>better.

320
00:14:52.845 --> 00:14:56.645
<00:14:52.845>I <00:14:52.972>mean, <00:14:53.099>if <00:14:53.226>you <00:14:53.354>reorder <00:14:53.481>the <00:14:53.608>steps, <00:14:53.735>you <00:14:53.863>can <00:14:53.990>come <00:14:54.117>to <00:14:54.245>this

321
00:14:57.095 --> 00:14:58.885
<00:14:57.095>where <00:14:57.250>the <00:14:57.406>total <00:14:57.561>amount <00:14:57.717>of <00:14:57.872>time <00:14:58.028>you <00:14:58.183>have <00:14:58.339>to <00:14:58.495>wait

322
00:14:59.195 --> 00:15:02.125
<00:14:59.195>between <00:14:59.428>start <00:14:59.661>and <00:14:59.895>finish <00:15:00.128>is <00:15:00.361>almost <00:15:00.595>half

323
00:15:02.465 --> 00:15:03.485
<00:15:02.465>of <00:15:02.694>what <00:15:02.924>we <00:15:03.153>started <00:15:03.383>with.

324
00:15:03.945 --> 00:15:07.405
<00:15:03.945>And <00:15:04.085>this <00:15:04.225>also <00:15:04.365>comes <00:15:04.505>with <00:15:04.645>an <00:15:04.785>additional <00:15:04.925>10 <00:15:05.065>to <00:15:05.205>30 <00:15:05.345>seconds

325
00:15:07.865 --> 00:15:12.075
<00:15:07.865>of <00:15:08.020>runtime, <00:15:08.176>which <00:15:08.331>is <00:15:08.487>I <00:15:08.642>think <00:15:08.798>a <00:15:08.953>good <00:15:09.109>trade <00:15:09.265>off.

326
00:15:13.905 --> 00:15:17.955
<00:15:13.905>Alright, <00:15:14.138>uh, <00:15:14.371>Antipater, <00:15:14.605>number <00:15:14.838>seven, <00:15:15.071>Groundhog <00:15:15.305>Day.

327
00:15:18.895 --> 00:15:23.315
<00:15:18.895>If <00:15:19.050>you're <00:15:19.206>familiar <00:15:19.361>with <00:15:19.517>the <00:15:19.672>the <00:15:19.828>movie, <00:15:19.983>uh, <00:15:20.139>this <00:15:20.295>is

328
00:15:23.315 --> 00:15:24.315
<00:15:23.315>where <00:15:23.465>we <00:15:23.615>start <00:15:23.765>over <00:15:23.915>all <00:15:24.065>the <00:15:24.215>time.

329
00:15:25.335 --> 00:15:27.915
<00:15:25.335>So <00:15:25.510>back <00:15:25.685>in <00:15:25.860>the <00:15:26.035>day <00:15:26.210>when <00:15:26.385>we <00:15:26.560>used <00:15:26.735>Jenkins,

330
00:15:28.095 --> 00:15:30.715
<00:15:28.095>or <00:15:28.328>even <00:15:28.561>Hudson, <00:15:28.795>if <00:15:29.028>you <00:15:29.261>were, <00:15:29.495>um,

331
00:15:31.375 --> 00:15:32.995
<00:15:31.375>if <00:15:31.655>you <00:15:31.935>were <00:15:32.215>running <00:15:32.495>pipelines <00:15:32.775>back

332
00:15:32.995 --> 00:15:35.355
<00:15:32.995>then, <00:15:33.275>we <00:15:33.555>checked <00:15:33.835>out <00:15:34.115>the <00:15:34.395>code.

333
00:15:35.415 --> 00:15:37.955
<00:15:35.415>The <00:15:35.570>code <00:15:35.726>was <00:15:35.881>persistently <00:15:36.037>on <00:15:36.192>disk <00:15:36.348>on <00:15:36.503>the <00:15:36.659>build <00:15:36.814>servers.

334
00:15:38.455 --> 00:15:40.355
<00:15:38.455>We <00:15:38.630>ran <00:15:38.805>the <00:15:38.980>build <00:15:39.155>and <00:15:39.330>the <00:15:39.505>old <00:15:39.680>build <00:15:39.855>results

335
00:15:40.425 --> 00:15:41.715
<00:15:40.425>were <00:15:40.715>still <00:15:41.005>in <00:15:41.295>the <00:15:41.586>directory.

336
00:15:42.095 --> 00:15:46.355
<00:15:42.095>So, <00:15:42.375>um, <00:15:42.655>incrementally <00:15:42.935>built <00:15:43.215>languages <00:15:43.495>such

337
00:15:46.475 --> 00:15:49.915
<00:15:46.475>as <00:15:46.650>Java, <00:15:46.825>CC <00:15:47.000>plus <00:15:47.175>plus, <00:15:47.350>they <00:15:47.525>were <00:15:47.700>really <00:15:47.875>fast

338
00:15:50.715 --> 00:15:52.555
<00:15:50.715>'cause <00:15:50.915>you <00:15:51.115>only <00:15:51.315>recompile <00:15:51.515>the <00:15:51.715>things <00:15:51.915>that <00:15:52.115>changed.

339
00:15:53.655 --> 00:15:55.275
<00:15:53.655>But <00:15:53.855>it <00:15:54.055>also <00:15:54.255>caused <00:15:54.454>a <00:15:54.655>lot <00:15:54.855>of <00:15:55.055>issues.

340
00:15:55.975 --> 00:15:58.555
<00:15:55.975>Uh, <00:15:56.175>build <00:15:56.375>artifacts <00:15:56.575>were <00:15:56.775>remained, <00:15:56.975>builds <00:15:57.175>were <00:15:57.375>broken

341
00:15:58.555 --> 00:16:02.155
<00:15:58.555>because <00:15:58.694>of <00:15:58.834>CRT <00:15:58.974>that <00:15:59.114>was <00:15:59.255>left <00:15:59.395>behind <00:15:59.535>because <00:15:59.675>from <00:15:59.814>old <00:15:59.954>builds.

342
00:16:02.415 --> 00:16:03.595
<00:16:02.415>So <00:16:02.627>we <00:16:02.839>started <00:16:03.052>cleaning <00:16:03.264>it <00:16:03.477>out.

343
00:16:04.455 --> 00:16:07.555
<00:16:04.455>And <00:16:04.595>now <00:16:04.735>with, <00:16:04.875>when <00:16:05.015>we <00:16:05.155>run <00:16:05.295>our <00:16:05.435>bills <00:16:05.575>in <00:16:05.715>the <00:16:05.855>cloud

344
00:16:07.655 --> 00:16:11.115
<00:16:07.655>or <00:16:07.888>on <00:16:08.121>containers, <00:16:08.355>we <00:16:08.588>start <00:16:08.821>from <00:16:09.055>scratch.

345
00:16:12.335 --> 00:16:15.835
<00:16:12.335>We <00:16:12.510>often, <00:16:12.685>we <00:16:12.860>start <00:16:13.035>installing <00:16:13.210>the <00:16:13.385>applications <00:16:13.560>we <00:16:13.735>need

346
00:16:15.835 --> 00:16:18.555
<00:16:15.835>for <00:16:16.035>building <00:16:16.235>our <00:16:16.435>program, <00:16:16.635>then <00:16:16.835>we <00:16:17.035>build <00:16:17.235>it

347
00:16:18.855 --> 00:16:20.275
<00:16:18.855>and <00:16:19.110>then <00:16:19.366>we <00:16:19.621>throw <00:16:19.877>away <00:16:20.133>everything.

348
00:16:20.445 --> 00:16:23.915
<00:16:20.445>Maybe <00:16:20.572>we <00:16:20.699>save <00:16:20.826>an <00:16:20.954>artifact <00:16:21.081>that <00:16:21.208>we <00:16:21.335>can <00:16:21.463>deploy <00:16:21.590>or, <00:16:21.717>or <00:16:21.845>run.

349
00:16:24.975 --> 00:16:26.595
<00:16:24.975>And <00:16:25.150>this <00:16:25.325>is <00:16:25.500>causing <00:16:25.675>a <00:16:25.850>lot <00:16:26.025>of <00:16:26.200>extra <00:16:26.375>time.

350
00:16:26.735 --> 00:16:30.995
<00:16:26.735>So <00:16:26.910>in <00:16:27.085>this <00:16:27.260>example, <00:16:27.435>this <00:16:27.610>is <00:16:27.785>just <00:16:27.960>the, <00:16:28.135>uh,

351
00:16:31.775 --> 00:16:34.155
<00:16:31.775>the <00:16:31.975>backend <00:16:32.175>part <00:16:32.375>of <00:16:32.574>the, <00:16:32.775>uh, <00:16:32.975>previous <00:16:33.175>pipeline.

352
00:16:34.155 --> 00:16:36.435
<00:16:34.155>So <00:16:34.355>we <00:16:34.555>have <00:16:34.755>a <00:16:34.954>setup. <00:16:35.155>We <00:16:35.355>fetch <00:16:35.555>dependencies,

353
00:16:36.615 --> 00:16:38.515
<00:16:36.615>we <00:16:36.815>do <00:16:37.015>the <00:16:37.215>linting, <00:16:37.415>we <00:16:37.615>do <00:16:37.815>the <00:16:38.015>compilation,

354
00:16:38.855 --> 00:16:41.155
<00:16:38.855>and <00:16:39.088>we <00:16:39.321>run <00:16:39.555>the <00:16:39.788>tests <00:16:40.021>12 <00:16:40.255>minutes.

355
00:16:43.295 --> 00:16:45.675
<00:16:43.295>So <00:16:43.645>pattern <00:16:43.995>number <00:16:44.344>six, <00:16:44.694>caching.

356
00:16:46.895 --> 00:16:49.195
<00:16:46.895>How <00:16:47.069>many <00:16:47.245>in <00:16:47.420>here <00:16:47.595>have <00:16:47.770>caching <00:16:47.944>in <00:16:48.120>their <00:16:48.295>pipelines?

357
00:16:51.815 --> 00:16:56.755
<00:16:51.815>How <00:16:51.970>many <00:16:52.126>in <00:16:52.281>here? <00:16:52.437>Cash <00:16:52.592>only <00:16:52.748>Their <00:16:52.903>dependencies. <00:16:53.059>Yeah. <00:16:53.215>Good.

358
00:16:57.655 --> 00:16:58.955
<00:16:57.655>So <00:16:57.822>that's <00:16:57.989>the <00:16:58.156>first <00:16:58.323>thing <00:16:58.490>you <00:16:58.657>think <00:16:58.825>about.

359
00:16:58.955 --> 00:17:00.075
<00:16:58.955>You <00:16:59.291>cash <00:16:59.627>your <00:16:59.963>dependencies.

360
00:17:00.775 --> 00:17:03.195
<00:17:00.775>Uh, <00:17:01.125>so <00:17:01.475>the <00:17:01.824>idea <00:17:02.175>is

361
00:17:03.195 --> 00:17:04.875
<00:17:03.195>that <00:17:03.428>we <00:17:03.661>fetch <00:17:03.895>dependencies <00:17:04.128>in <00:17:04.361>the <00:17:04.595>pipeline,

362
00:17:05.255 --> 00:17:08.995
<00:17:05.255>but <00:17:05.395>instead <00:17:05.535>of <00:17:05.675>doing <00:17:05.815>that, <00:17:05.955>going <00:17:06.095>out <00:17:06.235>to, <00:17:06.375>uh, <00:17:06.515>the <00:17:06.655>internet

363
00:17:09.095 --> 00:17:11.115
<00:17:09.095>to <00:17:09.328>download <00:17:09.561>our <00:17:09.795>dependencies, <00:17:10.028>we <00:17:10.261>cached <00:17:10.495>them.

364
00:17:12.055 --> 00:17:13.475
<00:17:12.055>So <00:17:12.237>we <00:17:12.420>store <00:17:12.602>them <00:17:12.785>in <00:17:12.967>our <00:17:13.150>data <00:17:13.332>center.

365
00:17:13.935 --> 00:17:16.955
<00:17:13.935>We <00:17:14.109>fetch <00:17:14.284>them <00:17:14.460>from <00:17:14.635>there <00:17:14.810>as <00:17:14.984>a <00:17:15.159>huge, <00:17:15.335>uh,

366
00:17:17.065 --> 00:17:18.955
<00:17:17.065>usually <00:17:17.265>a <00:17:17.465>zip <00:17:17.665>file <00:17:17.865>or <00:17:18.065>a <00:17:18.265>tar <00:17:18.465>file.

367
00:17:19.655 --> 00:17:22.075
<00:17:19.655>Uh, <00:17:19.829>and <00:17:20.004>then <00:17:20.180>we <00:17:20.355>redo <00:17:20.530>the <00:17:20.704>fetch <00:17:20.879>dependency <00:17:21.055>step

368
00:17:22.075 --> 00:17:23.275
<00:17:22.075>to <00:17:22.255>make <00:17:22.435>sure <00:17:22.615>that <00:17:22.795>we <00:17:22.975>got <00:17:23.155>everything.

369
00:17:23.655 --> 00:17:25.555
<00:17:23.655>Uh, <00:17:23.855>and <00:17:24.055>it <00:17:24.254>wasn't <00:17:24.454>an <00:17:24.655>old <00:17:24.855>cached <00:17:25.055>version.

370
00:17:25.975 --> 00:17:27.355
<00:17:25.974>And <00:17:26.130>then <00:17:26.285>we <00:17:26.440>update <00:17:26.596>the <00:17:26.751>cache <00:17:26.906>in <00:17:27.061>the <00:17:27.217>end.

371
00:17:28.495 --> 00:17:31.075
<00:17:28.494>So <00:17:28.622>if <00:17:28.749>you <00:17:28.876>look <00:17:29.004>at <00:17:29.131>this <00:17:29.258>from <00:17:29.385>the <00:17:29.513>previous <00:17:29.640>pipeline <00:17:29.767>running <00:17:29.895>on

372
00:17:31.075 --> 00:17:32.675
<00:17:31.075>GitHub <00:17:31.775>actions, <00:17:32.475>uh,

373
00:17:32.675 --> 00:17:35.235
<00:17:32.675>fetching <00:17:32.875>dependencies <00:17:33.075>from <00:17:33.274>the <00:17:33.475>internet <00:17:33.675>takes <00:17:33.875>seven <00:17:34.075>seconds.

374
00:17:36.385 --> 00:17:39.075
<00:17:36.385>Restoring <00:17:36.618>the <00:17:36.851>cache <00:17:37.085>takes <00:17:37.318>around <00:17:37.551>four <00:17:37.785>seconds.

375
00:17:39.695 --> 00:17:40.715
<00:17:39.695>And <00:17:39.878>then <00:17:40.062>we <00:17:40.245>need <00:17:40.429>to <00:17:40.612>check

376
00:17:40.715 --> 00:17:42.435
<00:17:40.715>that <00:17:40.995>dependencies <00:17:41.274>are <00:17:41.554>actually <00:17:41.834>all <00:17:42.115>there

377
00:17:43.415 --> 00:17:45.395
<00:17:43.415>and <00:17:43.590>we <00:17:43.764>need <00:17:43.940>to <00:17:44.115>update <00:17:44.290>the <00:17:44.465>cash <00:17:44.639>if <00:17:44.815>necessary.

378
00:17:45.695 --> 00:17:47.915
<00:17:45.695>And <00:17:45.870>both <00:17:46.044>of <00:17:46.220>those <00:17:46.395>take <00:17:46.570>around <00:17:46.745>a <00:17:46.919>second <00:17:47.095>together.

379
00:17:48.095 --> 00:17:51.525
<00:17:48.095>So <00:17:48.222>instead <00:17:48.349>of <00:17:48.476>seven <00:17:48.604>seconds, <00:17:48.731>we <00:17:48.858>now <00:17:48.985>do <00:17:49.113>it <00:17:49.240>in <00:17:49.367>five <00:17:49.495>seconds.

380
00:17:52.595 --> 00:17:55.145
<00:17:52.595>Well <00:17:52.945>done, <00:17:53.295>right? <00:17:53.645>We're <00:17:53.995>done.

381
00:17:55.685 --> 00:17:59.825
<00:17:55.685>Uh, <00:17:55.860>two <00:17:56.034>seconds <00:17:56.210>of <00:17:56.385>time. <00:17:56.560>Saving <00:17:56.735>isn't <00:17:56.909>that <00:17:57.085>much.

382
00:18:00.405 --> 00:18:03.305
<00:18:00.405>Uh, <00:18:00.545>what <00:18:00.685>I <00:18:00.825>can <00:18:00.965>say <00:18:01.105>is <00:18:01.245>that <00:18:01.385>this <00:18:01.524>is <00:18:01.665>usually <00:18:01.805>better.

383
00:18:03.425 --> 00:18:05.185
<00:18:03.425>I <00:18:03.580>had <00:18:03.736>an <00:18:03.891>interesting <00:18:04.047>talk <00:18:04.202>with <00:18:04.358>a <00:18:04.513>guy <00:18:04.669>at <00:18:04.825>Mercedes,

384
00:18:05.765 --> 00:18:06.785
<00:18:05.765>uh, <00:18:05.994>when <00:18:06.224>I <00:18:06.453>had <00:18:06.683>lunch.

385
00:18:07.605 --> 00:18:09.745
<00:18:07.605>Uh, <00:18:07.838>and <00:18:08.071>they <00:18:08.305>do <00:18:08.538>cash <00:18:08.771>due <00:18:09.005>dependencies

386
00:18:09.745 --> 00:18:13.985
<00:18:09.745>because <00:18:09.861>they <00:18:09.978>run <00:18:10.094>so <00:18:10.211>many <00:18:10.328>bills <00:18:10.445>that <00:18:10.561>if <00:18:10.678>they <00:18:10.794>go <00:18:10.911>out <00:18:11.028>to, <00:18:11.145>uh,

387
00:18:14.305 --> 00:18:17.105
<00:18:14.305>NPM <00:18:14.480>or <00:18:14.655>something, <00:18:14.830>they, <00:18:15.005>their <00:18:15.180>IP <00:18:15.355>addresses <00:18:15.530>get <00:18:15.705>blocked.

388
00:18:18.965 --> 00:18:21.865
<00:18:18.965>Uh, <00:18:19.139>so <00:18:19.314>there <00:18:19.490>are <00:18:19.665>definitely <00:18:19.840>use <00:18:20.014>cases <00:18:20.189>for <00:18:20.365>caching

389
00:18:21.865 --> 00:18:24.825
<00:18:21.865>that <00:18:22.098>is <00:18:22.331>not <00:18:22.565>just <00:18:22.798>pure <00:18:23.031>timing <00:18:23.265>time.

390
00:18:26.085 --> 00:18:28.865
<00:18:26.085>Uh, <00:18:26.260>i <00:18:26.435>I <00:18:26.610>think <00:18:26.785>you <00:18:26.960>should <00:18:27.135>cash <00:18:27.310>your <00:18:27.485>dependencies,

391
00:18:28.885 --> 00:18:30.105
<00:18:28.885>but <00:18:29.068>I <00:18:29.251>don't <00:18:29.434>think <00:18:29.617>you <00:18:29.800>should <00:18:29.983>stop

392
00:18:30.105 --> 00:18:31.185
<00:18:30.105>at <00:18:30.429>caching <00:18:30.753>your <00:18:31.077>dependencies.

393
00:18:31.585 --> 00:18:32.665
<00:18:31.585>I <00:18:31.779>think <00:18:31.973>there's <00:18:32.168>more <00:18:32.362>to <00:18:32.557>cash.

394
00:18:33.565 --> 00:18:36.465
<00:18:33.565>And <00:18:33.765>in <00:18:33.965>case <00:18:34.165>of <00:18:34.365>incrementally <00:18:34.565>compiled <00:18:34.765>languages <00:18:34.965>such

395
00:18:36.465 --> 00:18:39.705
<00:18:36.465>as <00:18:36.665>CC <00:18:36.865>plus <00:18:37.064>plus <00:18:37.264>rust, <00:18:37.465>uh, <00:18:37.665>C <00:18:37.865>sharp

396
00:18:41.045 --> 00:18:44.385
<00:18:41.045>go <00:18:41.200>probably <00:18:41.356>as <00:18:41.511>well, <00:18:41.667>if <00:18:41.822>we <00:18:41.978>catch <00:18:42.133>the <00:18:42.289>build <00:18:42.445>output,

397
00:18:45.165 --> 00:18:48.745
<00:18:45.165>we <00:18:45.320>can <00:18:45.476>build <00:18:45.631>our <00:18:45.787>application <00:18:45.942>from <00:18:46.098>the <00:18:46.253>previous <00:18:46.409>build <00:18:46.565>output

398
00:18:49.205 --> 00:18:51.425
<00:18:49.205>and <00:18:49.379>it <00:18:49.554>goes <00:18:49.730>a <00:18:49.905>lot <00:18:50.080>quicker <00:18:50.254>about <00:18:50.429>the <00:18:50.605>same

399
00:18:51.445 --> 00:18:52.745
<00:18:51.445>as <00:18:51.639>you <00:18:51.835>do <00:18:52.030>when <00:18:52.225>you <00:18:52.419>develop <00:18:52.614>locally.

400
00:18:53.205 --> 00:18:54.865
<00:18:53.205>You <00:18:53.485>do <00:18:53.764>a <00:18:54.044>change, <00:18:54.324>you <00:18:54.605>recompile.

401
00:18:55.045 --> 00:18:56.425
<00:18:55.045>And <00:18:55.293>the <00:18:55.541>compilation <00:18:55.790>is <00:18:56.038>really <00:18:56.287>quick

402
00:18:56.455 --> 00:18:58.705
<00:18:56.455>because <00:18:56.688>everything <00:18:56.921>else <00:18:57.155>has <00:18:57.388>already <00:18:57.621>been <00:18:57.855>compiled.

403
00:19:00.325 --> 00:19:04.505
<00:19:00.325>So <00:19:00.441>the <00:19:00.558>same <00:19:00.675>idea, <00:19:00.791>we <00:19:00.908>add <00:19:01.025>a <00:19:01.141>restore <00:19:01.258>and <00:19:01.375>an <00:19:01.491>update <00:19:01.608>before <00:19:01.725>and

404
00:19:04.505 --> 00:19:06.865
<00:19:04.505>after, <00:19:04.738>and <00:19:04.971>then <00:19:05.205>we <00:19:05.438>run <00:19:05.671>everything <00:19:05.905>again.

405
00:19:07.005 --> 00:19:08.785
<00:19:07.005>So <00:19:07.160>you <00:19:07.316>just <00:19:07.471>make <00:19:07.627>sure <00:19:07.782>that <00:19:07.938>we <00:19:08.093>didn't <00:19:08.249>miss <00:19:08.405>anything.

406
00:19:09.005 --> 00:19:10.185
<00:19:09.005>And <00:19:09.270>in <00:19:09.536>case <00:19:09.801>of <00:19:10.067>compiling

407
00:19:10.185 --> 00:19:11.585
<00:19:10.185>and <00:19:10.815>tests, <00:19:11.445>well

408
00:19:11.605 --> 00:19:13.545
<00:19:11.605>that's <00:19:11.805>probably <00:19:12.005>the <00:19:12.205>main <00:19:12.405>point <00:19:12.605>of <00:19:12.805>the <00:19:13.005>pipeline.

409
00:19:14.725 --> 00:19:16.825
<00:19:14.725>So <00:19:14.880>if <00:19:15.036>we <00:19:15.191>look <00:19:15.347>at <00:19:15.502>this <00:19:15.658>at <00:19:15.813>the <00:19:15.969>rust <00:19:16.125>application,

410
00:19:17.055 --> 00:19:18.865
<00:19:17.055>restoring <00:19:17.335>the <00:19:17.615>cache <00:19:17.895>takes <00:19:18.175>31 <00:19:18.455>seconds.

411
00:19:19.705 --> 00:19:23.145
<00:19:19.705>I <00:19:19.845>think <00:19:19.985>it's <00:19:20.125>about <00:19:20.264>four <00:19:20.405>gigabytes <00:19:20.544>of <00:19:20.685>data <00:19:20.824>that <00:19:20.965>it <00:19:21.105>restores.

412
00:19:23.985 --> 00:19:26.745
<00:19:23.985>Linting <00:19:24.185>is <00:19:24.385>reduced <00:19:24.584>by <00:19:24.784>more <00:19:24.985>than <00:19:25.185>two <00:19:25.385>minutes,

413
00:19:27.135 --> 00:19:29.185
<00:19:27.135>basically <00:19:27.485>only <00:19:27.835>lints <00:19:28.185>the <00:19:28.535>changes.

414
00:19:30.005 --> 00:19:32.225
<00:19:30.005>The <00:19:30.205>changes <00:19:30.405>here <00:19:30.605>is <00:19:30.805>a <00:19:31.005>new <00:19:31.205>test <00:19:31.405>case.

415
00:19:32.825 --> 00:19:34.025
<00:19:32.825>A <00:19:33.005>few <00:19:33.185>new <00:19:33.365>test <00:19:33.545>cases <00:19:33.725>I <00:19:33.905>think,

416
00:19:34.405 --> 00:19:36.705
<00:19:34.405>and <00:19:34.532>some <00:19:34.659>code <00:19:34.786>to <00:19:34.914>make <00:19:35.041>sure <00:19:35.168>that <00:19:35.295>all <00:19:35.423>the <00:19:35.550>tests <00:19:35.677>passes <00:19:35.805>again.

417
00:19:38.165 --> 00:19:40.945
<00:19:38.165>So <00:19:38.305>linting <00:19:38.445>goes <00:19:38.585>down <00:19:38.725>by <00:19:38.865>almost <00:19:39.004>two <00:19:39.145>more <00:19:39.284>than <00:19:39.425>two <00:19:39.565>minutes

418
00:19:41.345 --> 00:19:43.865
<00:19:41.345>compiled <00:19:41.545>time <00:19:41.745>goes <00:19:41.945>down <00:19:42.145>by <00:19:42.345>almost <00:19:42.545>three <00:19:42.745>minutes,

419
00:19:43.935 --> 00:19:45.025
<00:19:43.935>more <00:19:44.180>than <00:19:44.425>three <00:19:44.670>minutes <00:19:44.916>actually.

420
00:19:45.485 --> 00:19:47.345
<00:19:45.485>And <00:19:45.764>the <00:19:46.044>tests <00:19:46.324>take <00:19:46.604>actually <00:19:46.885>slightly

421
00:19:47.345 --> 00:19:48.585
<00:19:47.345>longer <00:19:47.624>because <00:19:47.903>I <00:19:48.182>added <00:19:48.461>tests.

422
00:19:49.005 --> 00:19:52.705
<00:19:49.005>And <00:19:49.132>we <00:19:49.259>should <00:19:49.386>rerun <00:19:49.514>all <00:19:49.641>our <00:19:49.768>tests, <00:19:49.895>uh, <00:19:50.023>at <00:19:50.150>least <00:19:50.277>rust <00:19:50.405>test.

423
00:19:53.605 --> 00:19:57.145
<00:19:53.605>And <00:19:53.732>then <00:19:53.859>we <00:19:53.986>update <00:19:54.114>the <00:19:54.241>cache, <00:19:54.368>which <00:19:54.495>takes <00:19:54.623>on <00:19:54.750>the <00:19:54.877>main <00:19:55.005>branch

424
00:19:57.145 --> 00:19:58.185
<00:19:57.145>where <00:19:57.332>we <00:19:57.519>actually <00:19:57.706>update <00:19:57.893>the <00:19:58.081>cache.

425
00:19:58.185 --> 00:20:00.825
<00:19:58.185>Maybe <00:19:58.418>it <00:19:58.651>takes <00:19:58.885>another <00:19:59.118>30 <00:19:59.351>seconds, <00:19:59.585>uh,

426
00:20:01.045 --> 00:20:02.785
<00:20:01.045>but <00:20:01.245>the <00:20:01.445>time <00:20:01.645>saving <00:20:01.845>here <00:20:02.045>is <00:20:02.245>pretty <00:20:02.445>huge.

427
00:20:04.175 --> 00:20:08.015
<00:20:04.175>More <00:20:04.350>than <00:20:04.524>four <00:20:04.700>minutes <00:20:04.875>saved <00:20:05.050>by <00:20:05.225>storing <00:20:05.399>four <00:20:05.575>gigabytes

428
00:20:08.015 --> 00:20:09.055
<00:20:08.015>of <00:20:08.202>data <00:20:08.389>on <00:20:08.576>a <00:20:08.763>server <00:20:08.951>somewhere.

429
00:20:11.115 --> 00:20:13.295
<00:20:11.115>And <00:20:11.270>we <00:20:11.426>can <00:20:11.581>do <00:20:11.737>this <00:20:11.892>not <00:20:12.048>just <00:20:12.203>for, <00:20:12.359>for, <00:20:12.515>uh,

430
00:20:13.355 --> 00:20:15.455
<00:20:13.355>our <00:20:13.555>compiled <00:20:13.755>languages <00:20:13.955>or <00:20:14.155>for <00:20:14.355>our <00:20:14.555>build <00:20:14.755>artifacts.

431
00:20:15.455 --> 00:20:18.095
<00:20:15.455>We <00:20:15.629>can <00:20:15.804>do <00:20:15.980>it <00:20:16.155>for, <00:20:16.330>uh, <00:20:16.504>our <00:20:16.679>Docker <00:20:16.855>images.

432
00:20:18.875 --> 00:20:22.255
<00:20:18.875>Uh, <00:20:18.991>Docker <00:20:19.108>can <00:20:19.225>do <00:20:19.341>this, <00:20:19.458>but <00:20:19.575>if <00:20:19.691>you <00:20:19.808>use <00:20:19.925>build <00:20:20.041>kit, <00:20:20.158>it <00:20:20.275>can.

433
00:20:22.755 --> 00:20:25.095
<00:20:22.755>And <00:20:22.988>Poman <00:20:23.221>does <00:20:23.455>this, <00:20:23.688>uh, <00:20:23.921>built <00:20:24.155>in.

434
00:20:26.155 --> 00:20:29.775
<00:20:26.155>So <00:20:26.271>what <00:20:26.388>we <00:20:26.504>do <00:20:26.621>is <00:20:26.738>we <00:20:26.855>set <00:20:26.971>up, <00:20:27.088>uh, <00:20:27.205>a <00:20:27.321>different, <00:20:27.438>uh, <00:20:27.555>image.

435
00:20:29.995 --> 00:20:32.855
<00:20:29.995>You <00:20:30.169>can't <00:20:30.344>use <00:20:30.520>the <00:20:30.695>same <00:20:30.870>image <00:20:31.044>as <00:20:31.219>your <00:20:31.395>building.

436
00:20:33.555 --> 00:20:37.695
<00:20:33.555>So <00:20:33.695>I <00:20:33.835>usually <00:20:33.975>just <00:20:34.115>tack <00:20:34.255>on <00:20:34.395>a, <00:20:34.535>a <00:20:34.675>cache <00:20:34.815>suffix, <00:20:34.955>uh,

437
00:20:38.155 --> 00:20:39.255
<00:20:38.155>and <00:20:38.320>we <00:20:38.485>tell <00:20:38.650>it <00:20:38.815>to <00:20:38.980>cash <00:20:39.145>from

438
00:20:39.255 --> 00:20:40.335
<00:20:39.255>and <00:20:39.498>cache <00:20:39.741>two, <00:20:39.984>which <00:20:40.227>means

439
00:20:40.335 --> 00:20:41.575
<00:20:40.335>that <00:20:40.521>it <00:20:40.707>loads <00:20:40.893>the <00:20:41.079>cache <00:20:41.265>from <00:20:41.451>there

440
00:20:41.575 --> 00:20:42.895
<00:20:41.575>and <00:20:41.773>it <00:20:41.971>uploads <00:20:42.169>the <00:20:42.367>cache <00:20:42.565>to <00:20:42.763>there.

441
00:20:43.315 --> 00:20:46.535
<00:20:43.315>And <00:20:43.442>then <00:20:43.569>we <00:20:43.696>build. <00:20:43.824>So <00:20:43.951>in <00:20:44.078>this <00:20:44.205>case, <00:20:44.333>I've <00:20:44.460>changed <00:20:44.587>the <00:20:44.715>version

442
00:20:46.595 --> 00:20:51.245
<00:20:46.595>of <00:20:46.722>cross, <00:20:46.849>which <00:20:46.976>is <00:20:47.104>a, <00:20:47.231>uh, <00:20:47.358>a <00:20:47.485>rust <00:20:47.613>tool <00:20:47.740>that <00:20:47.867>I <00:20:47.995>use.

443
00:20:52.185 --> 00:20:54.685
<00:20:52.185>Two <00:20:52.360>different <00:20:52.534>version. <00:20:52.710>But <00:20:52.885>as <00:20:53.060>you <00:20:53.235>can <00:20:53.409>see <00:20:53.585>here,

444
00:20:57.745 --> 00:21:00.195
<00:20:57.745>when <00:20:58.024>it <00:20:58.304>runs <00:20:58.584>the <00:20:58.864>previous <00:20:59.145>tool,

445
00:21:00.195 --> 00:21:02.555
<00:21:00.195>when <00:21:00.370>it <00:21:00.544>installs <00:21:00.720>the <00:21:00.895>previous <00:21:01.070>tool, <00:21:01.245>that <00:21:01.419>hasn't <00:21:01.595>changed.

446
00:21:04.135 --> 00:21:06.915
<00:21:04.135>So <00:21:04.262>it <00:21:04.389>finds <00:21:04.516>it <00:21:04.644>in <00:21:04.771>the <00:21:04.898>cache <00:21:05.025>and <00:21:05.153>it <00:21:05.280>takes <00:21:05.407>eight <00:21:05.535>seconds

447
00:21:06.915 --> 00:21:08.955
<00:21:06.915>because <00:21:07.195>it's <00:21:07.475>downloading <00:21:07.754>from <00:21:08.034>the <00:21:08.315>cache.

448
00:21:09.555 --> 00:21:12.025
<00:21:09.555>Installing <00:21:09.755>this, <00:21:09.955>actually <00:21:10.155>waiting <00:21:10.355>for <00:21:10.555>the <00:21:10.755>install <00:21:10.955>takes

449
00:21:12.025 --> 00:21:13.065
<00:21:12.025>around <00:21:12.212>two <00:21:12.399>and <00:21:12.586>a <00:21:12.773>half <00:21:12.961>minutes.

450
00:21:13.765 --> 00:21:16.505
<00:21:13.765>So <00:21:13.920>we've <00:21:14.076>saved <00:21:14.231>two <00:21:14.387>minutes. <00:21:14.542>And <00:21:14.698>then <00:21:14.853>when <00:21:15.009>we <00:21:15.165>come

451
00:21:16.505 --> 00:21:18.905
<00:21:16.505>to <00:21:16.680>the <00:21:16.855>version <00:21:17.030>of <00:21:17.205>cross, <00:21:17.380>which <00:21:17.555>has <00:21:17.730>been <00:21:17.905>changed,

452
00:21:19.485 --> 00:21:20.665
<00:21:19.485>uh, <00:21:19.697>it <00:21:19.909>needs <00:21:20.122>to <00:21:20.334>run <00:21:20.547>that.

453
00:21:20.885 --> 00:21:23.505
<00:21:20.885>So <00:21:21.025>from <00:21:21.165>this <00:21:21.305>point <00:21:21.445>on, <00:21:21.585>if <00:21:21.725>we <00:21:21.865>have <00:21:22.004>any <00:21:22.145>further <00:21:22.285>steps,

454
00:21:23.685 --> 00:21:25.105
<00:21:23.685>we <00:21:23.940>can't <00:21:24.196>use <00:21:24.451>the <00:21:24.707>cache <00:21:24.963>anymore,

455
00:21:25.685 --> 00:21:27.705
<00:21:25.685>but <00:21:25.885>we've <00:21:26.085>saved <00:21:26.284>ourselves <00:21:26.485>more <00:21:26.685>than <00:21:26.885>two <00:21:27.085>minutes

456
00:21:27.885 --> 00:21:30.265
<00:21:27.885>by <00:21:28.060>caching <00:21:28.235>all <00:21:28.410>the <00:21:28.585>steps <00:21:28.760>up <00:21:28.935>to <00:21:29.110>that <00:21:29.285>point.

457
00:21:31.885 --> 00:21:34.265
<00:21:31.885>So <00:21:32.040>it <00:21:32.196>also <00:21:32.351>makes <00:21:32.507>it <00:21:32.662>important <00:21:32.818>to <00:21:32.973>how <00:21:33.129>you, <00:21:33.285>in

458
00:21:34.265 --> 00:21:35.585
<00:21:34.265>what <00:21:34.502>order <00:21:34.740>you <00:21:34.977>structure <00:21:35.215>your <00:21:35.453>images.

459
00:21:37.085 --> 00:21:39.465
<00:21:37.085>And <00:21:37.240>we <00:21:37.396>can <00:21:37.551>use <00:21:37.707>this <00:21:37.862>with <00:21:38.018>four <00:21:38.173>pattern <00:21:38.329>number <00:21:38.485>seven,

460
00:21:39.465 --> 00:21:40.465
<00:21:39.465>which <00:21:39.764>is <00:21:40.064>tooling <00:21:40.365>images,

461
00:21:40.675 --> 00:21:44.305
<00:21:40.675>where <00:21:40.908>we <00:21:41.141>build <00:21:41.375>container <00:21:41.608>images <00:21:41.841>using <00:21:42.075>caches

462
00:21:44.485 --> 00:21:45.745
<00:21:44.485>and <00:21:44.862>using <00:21:45.241>conditional <00:21:45.619>logic

463
00:21:46.925 --> 00:21:48.545
<00:21:46.925>to <00:21:47.158>contain <00:21:47.391>all <00:21:47.625>the <00:21:47.858>tools <00:21:48.091>we <00:21:48.325>need.

464
00:21:48.605 --> 00:21:51.305
<00:21:48.605>So <00:21:48.745>we <00:21:48.885>don't <00:21:49.025>start <00:21:49.165>from <00:21:49.305>scratch <00:21:49.445>anywhere <00:21:49.585>at <00:21:49.725>all <00:21:49.865>the <00:21:50.005>times.

465
00:21:51.765 --> 00:21:54.465
<00:21:51.765>So <00:21:51.892>in <00:21:52.019>this <00:21:52.146>case, <00:21:52.274>we <00:21:52.401>have <00:21:52.528>a <00:21:52.655>pre-step <00:21:52.783>which <00:21:52.910>builds <00:21:53.037>the <00:21:53.165>image.

466
00:21:54.725 --> 00:21:57.265
<00:21:54.725>We <00:21:54.865>call <00:21:55.004>it <00:21:55.145>tooling. <00:21:55.284>And <00:21:55.425>we'll <00:21:55.564>then <00:21:55.705>use <00:21:55.844>the <00:21:55.985>tooling <00:21:56.125>image

467
00:21:57.405 --> 00:21:58.905
<00:21:57.405>for <00:21:57.629>the <00:21:57.855>backend <00:21:58.080>and <00:21:58.305>the <00:21:58.530>integration <00:21:58.754>tests.

468
00:22:00.205 --> 00:22:03.585
<00:22:00.205>And <00:22:00.345>if <00:22:00.485>we <00:22:00.625>apply <00:22:00.764>the <00:22:00.905>conditional <00:22:01.044>steps, <00:22:01.185>we <00:22:01.324>can <00:22:01.465>say <00:22:01.605>that,

469
00:22:03.585 --> 00:22:05.705
<00:22:03.585>well, <00:22:03.785>if <00:22:03.985>we <00:22:04.185>don't <00:22:04.385>touch <00:22:04.585>the <00:22:04.785>tooling <00:22:04.985>image,

470
00:22:06.285 --> 00:22:07.585
<00:22:06.285>the <00:22:06.452>pipeline <00:22:06.619>is <00:22:06.786>set <00:22:06.953>up <00:22:07.120>in <00:22:07.287>a <00:22:07.455>way

471
00:22:07.585 --> 00:22:08.865
<00:22:07.585>that <00:22:07.873>uses <00:22:08.161>the <00:22:08.449>latest <00:22:08.737>version,

472
00:22:09.125 --> 00:22:10.465
<00:22:09.125>the <00:22:09.297>one <00:22:09.469>we <00:22:09.641>build <00:22:09.814>on <00:22:09.986>the <00:22:10.158>main <00:22:10.331>branch.

473
00:22:12.165 --> 00:22:14.705
<00:22:12.165>And <00:22:12.340>if <00:22:12.514>we <00:22:12.690>do <00:22:12.865>change <00:22:13.040>the <00:22:13.215>tooling <00:22:13.389>image, <00:22:13.565>well,

474
00:22:14.875 --> 00:22:18.025
<00:22:14.875>let's <00:22:15.075>say <00:22:15.275>we <00:22:15.475>upgrade <00:22:15.675>cross, <00:22:15.875>uh, <00:22:16.075>it <00:22:16.275>detects

475
00:22:18.025 --> 00:22:19.505
<00:22:18.025>that <00:22:18.215>something <00:22:18.405>has <00:22:18.595>changed <00:22:18.786>in <00:22:18.976>the <00:22:19.166>tooling <00:22:19.357>image.

476
00:22:20.205 --> 00:22:22.265
<00:22:20.205>We <00:22:20.485>rebuild <00:22:20.764>image, <00:22:21.044>we <00:22:21.324>push <00:22:21.605>it,

477
00:22:22.365 --> 00:22:25.545
<00:22:22.365>and <00:22:22.492>then <00:22:22.619>we <00:22:22.746>use <00:22:22.874>that <00:22:23.001>image <00:22:23.128>in <00:22:23.255>the <00:22:23.383>rest <00:22:23.510>of <00:22:23.637>the <00:22:23.765>pipeline.

478
00:22:26.325 --> 00:22:27.465
<00:22:26.325>So <00:22:26.581>for <00:22:26.838>all <00:22:27.094>the <00:22:27.351>pipelines,

479
00:22:27.465 --> 00:22:30.025
<00:22:27.465>that <00:22:27.620>doesn't <00:22:27.776>change <00:22:27.931>the <00:22:28.087>tooling <00:22:28.242>image, <00:22:28.398>we <00:22:28.553>don't <00:22:28.709>rebuild <00:22:28.865>it.

480
00:22:30.165 --> 00:22:31.825
<00:22:30.165>We <00:22:30.398>start <00:22:30.631>with <00:22:30.865>all <00:22:31.098>our <00:22:31.331>tools <00:22:31.565>installed.

481
00:22:32.525 --> 00:22:34.345
<00:22:32.525>And <00:22:32.665>when <00:22:32.805>we <00:22:32.945>change <00:22:33.085>it, <00:22:33.225>well <00:22:33.365>we <00:22:33.505>need <00:22:33.645>to <00:22:33.785>rebuild <00:22:33.925>it.

482
00:22:34.365 --> 00:22:38.625
<00:22:34.365>And <00:22:34.492>then <00:22:34.619>we <00:22:34.746>do. <00:22:34.874>And <00:22:35.001>then <00:22:35.128>once <00:22:35.255>that, <00:22:35.383>uh, <00:22:35.510>change <00:22:35.637>is <00:22:35.765>merged,

483
00:22:39.125 --> 00:22:40.825
<00:22:39.125>we <00:22:39.358>rebuild <00:22:39.591>the <00:22:39.825>image <00:22:40.058>again <00:22:40.291>on <00:22:40.525>main.

484
00:22:41.165 --> 00:22:43.305
<00:22:41.165>And <00:22:41.365>now <00:22:41.565>that <00:22:41.764>image <00:22:41.965>is <00:22:42.165>the <00:22:42.365>latest <00:22:42.565>image.

485
00:22:43.685 --> 00:22:45.145
<00:22:43.685>So <00:22:44.013>all <00:22:44.341>the <00:22:44.670>builds <00:22:44.999>after

486
00:22:45.145 --> 00:22:46.905
<00:22:45.145>that <00:22:45.378>point <00:22:45.611>used <00:22:45.845>in <00:22:46.078>new <00:22:46.311>tooling <00:22:46.545>image.

487
00:22:48.765 --> 00:22:51.745
<00:22:48.765>But <00:22:48.892>we <00:22:49.019>need <00:22:49.146>to <00:22:49.274>make <00:22:49.401>sure <00:22:49.528>that <00:22:49.655>we <00:22:49.783>don't <00:22:49.910>run <00:22:50.037>into <00:22:50.165>antipater

488
00:22:51.745 --> 00:22:53.105
<00:22:51.745>number <00:22:51.989>eight <00:22:52.234>here, <00:22:52.479>which <00:22:52.724>is <00:22:52.969>interference.

489
00:22:54.445 --> 00:22:56.825
<00:22:54.445>And <00:22:54.600>this <00:22:54.756>is <00:22:54.911>when <00:22:55.067>we <00:22:55.222>do <00:22:55.378>something <00:22:55.533>in <00:22:55.689>our <00:22:55.845>pipeline

490
00:22:57.095 --> 00:22:59.985
<00:22:57.095>that <00:22:57.445>makes <00:22:57.795>other <00:22:58.145>pipelines <00:22:58.495>fail.

491
00:23:01.685 --> 00:23:05.625
<00:23:01.685>So <00:23:01.840>in <00:23:01.996>case <00:23:02.151>of <00:23:02.307>the <00:23:02.462>tooling <00:23:02.618>image, <00:23:02.773>if <00:23:02.929>we <00:23:03.085>use,

492
00:23:07.365 --> 00:23:11.625
<00:23:07.365>uh, <00:23:07.492>I <00:23:07.619>was <00:23:07.746>using <00:23:07.874>the <00:23:08.001>Shah, <00:23:08.128>the <00:23:08.255>GitHub <00:23:08.383>Shah, <00:23:08.510>the <00:23:08.637>gi, <00:23:08.765>uh,

493
00:23:11.845 --> 00:23:14.945
<00:23:11.845>as <00:23:11.972>an <00:23:12.099>identifier, <00:23:12.226>if <00:23:12.354>we <00:23:12.481>only <00:23:12.608>use, <00:23:12.735>if <00:23:12.863>we <00:23:12.990>reuse <00:23:13.117>the <00:23:13.245>same

494
00:23:15.625 --> 00:23:17.865
<00:23:15.625>identifier <00:23:15.858>all <00:23:16.091>the <00:23:16.325>time, <00:23:16.558>the <00:23:16.791>latest <00:23:17.025>identifier,

495
00:23:19.205 --> 00:23:21.105
<00:23:19.205>we <00:23:19.485>may <00:23:19.764>interfere <00:23:20.044>with <00:23:20.324>other <00:23:20.605>pipelines.

496
00:23:21.105 --> 00:23:24.505
<00:23:21.105>So <00:23:21.245>in <00:23:21.385>this <00:23:21.525>case, <00:23:21.665>we <00:23:21.805>built <00:23:21.945>the <00:23:22.085>image, <00:23:22.225>it's <00:23:22.365>called <00:23:22.505>latest.

497
00:23:25.205 --> 00:23:28.585
<00:23:25.205>We <00:23:25.360>run <00:23:25.516>our <00:23:25.671>backend <00:23:25.827>and <00:23:25.982>frontend <00:23:26.138>tests <00:23:26.293>or, <00:23:26.449>or <00:23:26.605>compilation.

498
00:23:28.765 --> 00:23:32.105
<00:23:28.765>But <00:23:28.940>while <00:23:29.115>they <00:23:29.290>are <00:23:29.465>running <00:23:29.640>another <00:23:29.815>PR <00:23:29.990>comes <00:23:30.165>in,

499
00:23:32.205 --> 00:23:35.225
<00:23:32.205>it <00:23:32.360>changes <00:23:32.516>the <00:23:32.671>tooling <00:23:32.827>image, <00:23:32.982>it <00:23:33.138>builds <00:23:33.293>a <00:23:33.449>tooling <00:23:33.605>image,

500
00:23:35.765 --> 00:23:37.665
<00:23:35.765>it <00:23:36.115>overwrites <00:23:36.465>the <00:23:36.815>latest <00:23:37.165>tag.

501
00:23:38.405 --> 00:23:41.865
<00:23:38.405>And <00:23:38.560>what <00:23:38.716>happens <00:23:38.871>now? <00:23:39.027>Well <00:23:39.182>now <00:23:39.338>the <00:23:39.493>integration <00:23:39.649>tests <00:23:39.805>which

502
00:23:41.865 --> 00:23:45.765
<00:23:41.865>haven't <00:23:42.020>started <00:23:42.176>yet <00:23:42.331>will <00:23:42.487>use <00:23:42.642>the <00:23:42.798>tooling <00:23:42.953>image <00:23:43.109>from <00:23:43.265>the

503
00:23:45.765 --> 00:23:48.805
<00:23:45.765>other <00:23:45.965>pipeline, <00:23:46.165>which <00:23:46.365>may <00:23:46.565>cause <00:23:46.765>it <00:23:46.965>to <00:23:47.165>fail.

504
00:23:51.245 --> 00:23:53.985
<00:23:51.245>Uh, <00:23:51.400>but <00:23:51.556>of <00:23:51.711>course <00:23:51.867>the <00:23:52.022>other <00:23:52.178>pipeline <00:23:52.333>will <00:23:52.489>be <00:23:52.645>fine

505
00:23:53.985 --> 00:23:55.425
<00:23:53.985>because <00:23:54.201>it's <00:23:54.417>using <00:23:54.632>its <00:23:54.849>own <00:23:55.065>image, <00:23:55.281>right?

506
00:23:55.565 --> 00:23:57.705
<00:23:55.565>But <00:23:55.765>the <00:23:55.965>old <00:23:56.165>pipeline <00:23:56.365>that <00:23:56.565>someone <00:23:56.765>else <00:23:56.965>has

507
00:23:57.705 --> 00:23:58.825
<00:23:57.705>started <00:23:58.209>now <00:23:58.713>fails.

508
00:23:58.825 --> 00:24:00.225
<00:23:58.825>We <00:23:59.035>have <00:23:59.245>a <00:23:59.455>random <00:23:59.665>failure, <00:23:59.875>we <00:24:00.085>need

509
00:24:00.225 --> 00:24:02.305
<00:24:00.225>to <00:24:00.380>hit <00:24:00.536>retry <00:24:00.691>and <00:24:00.847>we <00:24:01.002>don't <00:24:01.158>want <00:24:01.313>to <00:24:01.469>do <00:24:01.625>that.

510
00:24:03.285 --> 00:24:07.705
<00:24:03.285>And <00:24:03.440>that's <00:24:03.596>why <00:24:03.751>we <00:24:03.907>use <00:24:04.062>the <00:24:04.218>sha <00:24:04.373>usually <00:24:04.529>something <00:24:04.685>unique

511
00:24:08.125 --> 00:24:09.465
<00:24:08.125>for <00:24:08.366>the <00:24:08.607>pipeline <00:24:08.848>that's <00:24:09.089>actually <00:24:09.331>running.

512
00:24:09.565 --> 00:24:12.305
<00:24:09.565>It <00:24:09.705>could <00:24:09.845>be <00:24:09.985>a <00:24:10.125>pipeline <00:24:10.265>id, <00:24:10.405>I <00:24:10.545>usually <00:24:10.685>use <00:24:10.825>the <00:24:10.965>SHA

513
00:24:12.305 --> 00:24:13.985
<00:24:12.305>because <00:24:12.771>it's <00:24:13.238>available <00:24:13.705>everywhere.

514
00:24:14.085 --> 00:24:17.265
<00:24:14.085>And <00:24:14.435>it's <00:24:14.785>definitely <00:24:15.135>unique <00:24:15.485>even

515
00:24:17.265 --> 00:24:20.465
<00:24:17.265>between <00:24:17.392>if <00:24:17.519>you <00:24:17.646>force <00:24:17.774>push <00:24:17.901>or <00:24:18.028>commit <00:24:18.155>or <00:24:18.283>to <00:24:18.410>push <00:24:18.537>or <00:24:18.665>commit.

516
00:24:21.295 --> 00:24:26.105
<00:24:21.295>It's <00:24:21.575>always <00:24:21.855>unique. <00:24:22.135>So <00:24:22.415>I <00:24:22.695>think

517
00:24:26.105 --> 00:24:29.065
<00:24:26.105>we're <00:24:26.338>at <00:24:26.571>the <00:24:26.805>last <00:24:27.038>pattern <00:24:27.271>actually <00:24:27.505>overloaded,

518
00:24:29.975 --> 00:24:31.845
<00:24:29.975>which <00:24:30.208>is <00:24:30.441>when <00:24:30.675>you're <00:24:30.908>running <00:24:31.141>your <00:24:31.375>belts

519
00:24:32.385 --> 00:24:33.765
<00:24:32.385>on <00:24:33.006>underpowered <00:24:33.627>machines,

520
00:24:34.665 --> 00:24:36.885
<00:24:34.665>please <00:24:34.865>don't <00:24:35.065>run <00:24:35.264>your <00:24:35.465>belts <00:24:35.665>on <00:24:35.865>raspberry <00:24:36.065>pipes.

521
00:24:38.465 --> 00:24:40.485
<00:24:38.465>Uh, <00:24:38.592>I <00:24:38.719>see <00:24:38.846>this <00:24:38.974>a <00:24:39.101>lot <00:24:39.228>and <00:24:39.355>I <00:24:39.483>think <00:24:39.610>it's <00:24:39.737>a <00:24:39.865>shame

522
00:24:40.685 --> 00:24:42.805
<00:24:40.685>because <00:24:40.918>we <00:24:41.151>use <00:24:41.385>our <00:24:41.618>pipelines <00:24:41.851>so <00:24:42.085>much.

523
00:24:43.705 --> 00:24:44.725
<00:24:43.705>All <00:24:44.011>of <00:24:44.317>us <00:24:44.622>interact

524
00:24:44.725 --> 00:24:46.805
<00:24:44.725>with <00:24:44.925>our <00:24:45.125>pipelines <00:24:45.324>daily, <00:24:45.524>multiple <00:24:45.725>times <00:24:45.925>a <00:24:46.125>day.

525
00:24:47.465 --> 00:24:50.485
<00:24:47.465>And <00:24:47.639>in <00:24:47.814>a <00:24:47.990>lot <00:24:48.165>of <00:24:48.340>companies <00:24:48.514>it's <00:24:48.689>under <00:24:48.865>prioritized.

526
00:24:50.755 --> 00:24:53.045
<00:24:50.755>It's <00:24:50.930>running <00:24:51.105>on <00:24:51.280>old <00:24:51.455>hardware, <00:24:51.630>no <00:24:51.805>one's <00:24:51.980>maintaining <00:24:52.155>them.

527
00:24:53.705 --> 00:24:57.285
<00:24:53.705>Uh, <00:24:53.985>I've <00:24:54.264>seen <00:24:54.544>pipelines <00:24:54.824>running, <00:24:55.105>uh,

528
00:24:57.305 --> 00:24:59.965
<00:24:57.305>two <00:24:57.460>years <00:24:57.616>ago <00:24:57.771>on <00:24:57.927>Red <00:24:58.082>Hat <00:24:58.238>versions <00:24:58.393>that <00:24:58.549>went <00:24:58.705>out

529
00:24:59.965 --> 00:25:01.565
<00:24:59.965>of <00:25:00.431>support <00:25:00.898>in <00:25:01.365>2014.

530
00:25:03.945 --> 00:25:05.805
<00:25:03.945>Uh, <00:25:04.120>that's <00:25:04.294>not <00:25:04.470>a <00:25:04.645>good <00:25:04.820>situation <00:25:04.995>to <00:25:05.169>be <00:25:05.345>in.

531
00:25:06.545 --> 00:25:09.485
<00:25:06.545>So <00:25:06.745>I <00:25:06.945>have <00:25:07.145>some <00:25:07.345>rules <00:25:07.545>of <00:25:07.745>thumb <00:25:07.945>for

532
00:25:09.485 --> 00:25:11.565
<00:25:09.485>how <00:25:09.718>your <00:25:09.951>build <00:25:10.185>agents <00:25:10.418>should <00:25:10.651>be <00:25:10.885>sized.

533
00:25:12.865 --> 00:25:16.165
<00:25:12.865>And <00:25:12.992>I <00:25:13.119>think <00:25:13.246>the <00:25:13.374>build <00:25:13.501>agent <00:25:13.628>should <00:25:13.755>be <00:25:13.883>at <00:25:14.010>least <00:25:14.137>as <00:25:14.265>powerful

534
00:25:16.665 --> 00:25:19.725
<00:25:16.665>as <00:25:16.865>the <00:25:17.065>least <00:25:17.264>powerful <00:25:17.465>developer <00:25:17.665>machine <00:25:17.865>that <00:25:18.065>is

535
00:25:20.785 --> 00:25:22.045
<00:25:20.785>all <00:25:21.163>your <00:25:21.541>developer <00:25:21.919>machines.

536
00:25:23.395 --> 00:25:26.205
<00:25:23.395>Pick <00:25:23.675>the <00:25:23.955>least, <00:25:24.235>uh, <00:25:24.514>powerful <00:25:24.795>one.

537
00:25:26.475 --> 00:25:28.645
<00:25:26.475>Make <00:25:26.630>your <00:25:26.786>build <00:25:26.941>agents <00:25:27.097>at <00:25:27.252>least <00:25:27.408>as <00:25:27.563>powerful <00:25:27.719>as <00:25:27.875>that

538
00:25:28.645 --> 00:25:31.045
<00:25:28.645>because <00:25:28.800>then <00:25:28.956>make <00:25:29.111>sure <00:25:29.267>if <00:25:29.422>your <00:25:29.578>developer <00:25:29.733>can <00:25:29.889>run <00:25:30.045>your

539
00:25:31.245 --> 00:25:33.725
<00:25:31.245>pipelines, <00:25:31.445>your <00:25:31.645>build <00:25:31.844>agents <00:25:32.044>can <00:25:32.245>run <00:25:32.445>your <00:25:32.645>pipelines.

540
00:25:34.505 --> 00:25:37.245
<00:25:34.505>And <00:25:34.660>even <00:25:34.816>better, <00:25:34.971>the <00:25:35.127>build <00:25:35.282>agents <00:25:35.438>should <00:25:35.593>be <00:25:35.749>at <00:25:35.905>least

541
00:25:37.245 --> 00:25:39.245
<00:25:37.245>as <00:25:37.445>powerful <00:25:37.645>as <00:25:37.844>the <00:25:38.044>most <00:25:38.245>powerful <00:25:38.445>developed <00:25:38.645>machine.

542
00:25:39.625 --> 00:25:42.445
<00:25:39.625>If <00:25:39.800>you <00:25:39.975>have <00:25:40.150>a <00:25:40.325>developer <00:25:40.500>sitting <00:25:40.675>on <00:25:40.850>uh, <00:25:41.025>uh,

543
00:25:43.165 --> 00:25:46.805
<00:25:43.165>c <00:25:43.305>on <00:25:43.445>24 <00:25:43.585>core <00:25:43.725>machine <00:25:43.865>with <00:25:44.004>uh, <00:25:44.145>64 <00:25:44.284>gigabytes <00:25:44.425>of <00:25:44.565>ram,

544
00:25:48.295 --> 00:25:49.445
<00:25:48.295>maybe <00:25:48.640>you <00:25:48.985>don't <00:25:49.330>need

545
00:25:49.445 --> 00:25:51.365
<00:25:49.445>to <00:25:49.585>make <00:25:49.725>your <00:25:49.865>pipeline <00:25:50.004>run <00:25:50.145>on <00:25:50.284>that, <00:25:50.425>but <00:25:50.564>it <00:25:50.705>doesn't <00:25:50.845>hurt.

546
00:25:53.825 --> 00:25:55.045
<00:25:53.825>And <00:25:54.099>if <00:25:54.374>the <00:25:54.648>build <00:25:54.923>fails

547
00:25:55.045 --> 00:25:56.845
<00:25:55.045>because <00:25:55.325>of <00:25:55.605>a <00:25:55.885>lack <00:25:56.165>of <00:25:56.445>resources,

548
00:25:57.315 --> 00:25:58.845
<00:25:57.315>when <00:25:57.544>this <00:25:57.774>is <00:25:58.003>when <00:25:58.233>you <00:25:58.462>hit <00:25:58.692>retry

549
00:25:58.845 --> 00:26:00.925
<00:25:58.845>because <00:25:59.045>maybe <00:25:59.245>there <00:25:59.445>was <00:25:59.645>a <00:25:59.845>a <00:26:00.045>timing <00:26:00.245>issue

550
00:26:01.465 --> 00:26:04.885
<00:26:01.465>or <00:26:01.665>you <00:26:01.865>run <00:26:02.064>outta <00:26:02.264>the <00:26:02.465>ram <00:26:02.665>size <00:26:02.865>up,

551
00:26:05.305 --> 00:26:06.725
<00:26:05.305>that's <00:26:05.518>the <00:26:05.731>quickest <00:26:05.944>thing <00:26:06.157>you <00:26:06.370>can <00:26:06.582>do.

552
00:26:07.505 --> 00:26:09.005
<00:26:07.505>And <00:26:07.842>it <00:26:08.180>costs <00:26:08.517>way <00:26:08.855>less

553
00:26:09.225 --> 00:26:12.205
<00:26:09.225>to <00:26:09.352>run <00:26:09.479>on <00:26:09.606>a <00:26:09.734>slightly <00:26:09.861>more <00:26:09.988>powerful <00:26:10.115>machine <00:26:10.243>than <00:26:10.370>it <00:26:10.497>costs <00:26:10.625>you

554
00:26:12.465 --> 00:26:16.765
<00:26:12.465>to <00:26:12.665>spend <00:26:12.865>four <00:26:13.064>hours <00:26:13.264>making <00:26:13.465>the <00:26:13.665>resources, <00:26:13.865>uh,

555
00:26:17.325 --> 00:26:18.765
<00:26:17.325>resource <00:26:17.541>usage <00:26:17.757>of <00:26:17.973>a <00:26:18.189>pipeline <00:26:18.405>go <00:26:18.621>down.

556
00:26:19.285 --> 00:26:21.685
<00:26:19.285>'cause <00:26:19.440>your <00:26:19.596>time <00:26:19.751>is <00:26:19.907>way <00:26:20.062>more <00:26:20.218>expensive <00:26:20.373>than <00:26:20.529>server <00:26:20.685>time.

557
00:26:23.105 --> 00:26:25.885
<00:26:23.105>And <00:26:23.305>if <00:26:23.505>the <00:26:23.705>available <00:26:23.905>build <00:26:24.105>agent <00:26:24.305>configurations <00:26:24.505>isn't

558
00:26:26.405 --> 00:26:28.365
<00:26:26.405>sufficient, <00:26:26.754>consider <00:26:27.105>rolling <00:26:27.455>your <00:26:27.805>own.

559
00:26:29.685 --> 00:26:34.065
<00:26:29.685>So <00:26:29.860>should <00:26:30.034>you <00:26:30.210>own <00:26:30.385>your <00:26:30.560>own <00:26:30.735>agents, <00:26:30.909>uh, <00:26:31.085>maybe

560
00:26:34.215 --> 00:26:36.145
<00:26:34.215>because <00:26:34.415>you <00:26:34.615>gain <00:26:34.814>full <00:26:35.014>control <00:26:35.215>of <00:26:35.415>your <00:26:35.615>agents,

561
00:26:36.205 --> 00:26:39.505
<00:26:36.205>you <00:26:36.360>can <00:26:36.516>control <00:26:36.671>what <00:26:36.827>software <00:26:36.982>you're <00:26:37.138>using <00:26:37.293>on <00:26:37.449>your <00:26:37.605>agents.

562
00:26:39.565 --> 00:26:40.905
<00:26:39.565>You <00:26:39.866>can <00:26:40.168>control <00:26:40.469>the <00:26:40.771>versions,

563
00:26:41.365 --> 00:26:42.865
<00:26:41.365>you <00:26:41.635>can <00:26:41.905>control <00:26:42.175>the <00:26:42.445>operating <00:26:42.715>systems

564
00:26:43.385 --> 00:26:44.645
<00:26:43.385>and <00:26:43.611>you <00:26:43.838>can <00:26:44.065>control <00:26:44.292>the <00:26:44.519>hardware.

565
00:26:46.225 --> 00:26:48.045
<00:26:46.225>Uh, <00:26:46.399>but <00:26:46.574>you <00:26:46.750>need <00:26:46.925>to <00:26:47.100>maintain <00:26:47.274>all <00:26:47.449>of <00:26:47.625>this.

566
00:26:48.775 --> 00:26:50.205
<00:26:48.775>Don't <00:26:48.989>set <00:26:49.204>up <00:26:49.418>your <00:26:49.633>own <00:26:49.847>build <00:26:50.062>servers.

567
00:26:50.205 --> 00:26:52.165
<00:26:50.205>Leave <00:26:50.379>them <00:26:50.554>in <00:26:50.730>a <00:26:50.905>cell <00:26:51.080>running <00:26:51.254>for <00:26:51.429>five <00:26:51.605>years

568
00:26:52.195 --> 00:26:53.205
<00:26:52.195>with <00:26:52.422>no <00:26:52.649>one <00:26:52.876>touching <00:26:53.103>them

569
00:26:53.395 --> 00:26:55.325
<00:26:53.395>because <00:26:53.675>that <00:26:53.955>will <00:26:54.235>break <00:26:54.514>your <00:26:54.795>build.

570
00:26:55.665 --> 00:26:57.685
<00:26:55.665>You <00:26:55.805>will <00:26:55.945>have <00:26:56.085>to <00:26:56.225>hit <00:26:56.365>retry <00:26:56.504>and <00:26:56.645>we <00:26:56.784>don't <00:26:56.925>want <00:26:57.065>that.

571
00:26:59.225 --> 00:27:01.325
<00:26:59.225>Uh, <00:26:59.458>you <00:26:59.691>can <00:26:59.925>choose <00:27:00.158>the <00:27:00.391>exact <00:27:00.625>amount

572
00:27:01.405 --> 00:27:02.765
<00:27:01.405>of <00:27:01.609>resources <00:27:01.813>you <00:27:02.017>want <00:27:02.221>for <00:27:02.425>your <00:27:02.629>build.

573
00:27:03.265 --> 00:27:05.445
<00:27:03.265>If <00:27:03.420>you <00:27:03.576>need <00:27:03.731>nine <00:27:03.887>and <00:27:04.042>a <00:27:04.198>half <00:27:04.353>gigabytes <00:27:04.509>of <00:27:04.665>memory

574
00:27:05.505 --> 00:27:06.885
<00:27:05.505>for <00:27:05.919>your <00:27:06.333>builds, <00:27:06.747>perfect.

575
00:27:07.185 --> 00:27:10.005
<00:27:07.185>If <00:27:07.301>you're <00:27:07.418>on <00:27:07.534>your <00:27:07.651>own, <00:27:07.768>you <00:27:07.885>can <00:27:08.001>pick <00:27:08.118>that <00:27:08.235>You <00:27:08.351>need <00:27:08.468>a <00:27:08.585>GPU

576
00:27:10.005 --> 00:27:11.965
<00:27:10.005>for <00:27:10.205>your, <00:27:10.405>for <00:27:10.605>your <00:27:10.805>uh, <00:27:11.005>build <00:27:11.205>to <00:27:11.405>succeed.

577
00:27:12.225 --> 00:27:15.005
<00:27:12.225>You <00:27:12.458>can <00:27:12.691>have <00:27:12.925>that <00:27:13.158>as <00:27:13.391>well. <00:27:13.625>Uh,

578
00:27:15.185 --> 00:27:17.125
<00:27:15.185>but <00:27:15.418>you <00:27:15.651>need <00:27:15.885>to <00:27:16.118>manage <00:27:16.351>scaling <00:27:16.585>yourself.

579
00:27:17.745 --> 00:27:21.405
<00:27:17.745>Uh, <00:27:17.900>if <00:27:18.056>you're <00:27:18.211>running <00:27:18.367>cloud, <00:27:18.522>you <00:27:18.678>get <00:27:18.833>scaling <00:27:18.989>for <00:27:19.145>free.

580
00:27:21.465 --> 00:27:23.645
<00:27:21.465>You <00:27:21.620>can <00:27:21.776>run <00:27:21.931>as <00:27:22.087>many <00:27:22.242>parallel <00:27:22.398>pipelines <00:27:22.553>as <00:27:22.709>you <00:27:22.865>want

581
00:27:23.795 --> 00:27:26.965
<00:27:23.795>because <00:27:24.145>they're <00:27:24.495>just <00:27:24.845>magically <00:27:25.195>there.

582
00:27:27.585 --> 00:27:29.925
<00:27:27.585>If <00:27:27.725>you <00:27:27.865>run <00:27:28.005>your <00:27:28.145>own, <00:27:28.285>you <00:27:28.425>need <00:27:28.565>to <00:27:28.705>set <00:27:28.845>up <00:27:28.985>scaling.

583
00:27:30.035 --> 00:27:33.565
<00:27:30.035>Even <00:27:30.162>if <00:27:30.289>you <00:27:30.416>run <00:27:30.544>your <00:27:30.671>own <00:27:30.798>server, <00:27:30.925>build <00:27:31.053>servers <00:27:31.180>in <00:27:31.307>the <00:27:31.435>cloud,

584
00:27:33.905 --> 00:27:35.965
<00:27:33.905>you <00:27:34.045>need <00:27:34.185>to <00:27:34.325>make <00:27:34.465>sure <00:27:34.605>that <00:27:34.745>when <00:27:34.885>there <00:27:35.024>is <00:27:35.165>a <00:27:35.305>queue

585
00:27:36.495 --> 00:27:38.045
<00:27:36.495>start <00:27:36.960>new <00:27:37.425>build <00:27:37.890>servers.

586
00:27:38.325 --> 00:27:40.045
<00:27:38.325>'cause <00:27:38.558>you <00:27:38.791>don't <00:27:39.025>want <00:27:39.258>too <00:27:39.491>much <00:27:39.725>queues

587
00:27:40.605 --> 00:27:43.205
<00:27:40.605>'cause <00:27:40.760>it <00:27:40.916>doesn't <00:27:41.071>matter <00:27:41.227>how <00:27:41.382>fast <00:27:41.538>your <00:27:41.693>pipelines <00:27:41.849>are <00:27:42.005>if

588
00:27:43.205 --> 00:27:45.285
<00:27:43.205>they're <00:27:43.405>spent <00:27:43.605>waiting <00:27:43.804>for <00:27:44.004>other <00:27:44.205>pipelines <00:27:44.405>to <00:27:44.605>finish.

589
00:27:47.465 --> 00:27:50.165
<00:27:47.465>And <00:27:47.581>then <00:27:47.698>the <00:27:47.814>final <00:27:47.931>one, <00:27:48.048>which <00:27:48.165>you <00:27:48.281>can <00:27:48.398>both, <00:27:48.514>both <00:27:48.631>be <00:27:48.748>a <00:27:48.865>pro

590
00:27:50.165 --> 00:27:51.565
<00:27:50.165>and <00:27:50.417>a <00:27:50.669>con, <00:27:50.921>which <00:27:51.173>is <00:27:51.425>cost.

591
00:27:53.065 --> 00:27:57.525
<00:27:53.065>Uh, <00:27:53.192>if <00:27:53.319>you're <00:27:53.446>good <00:27:53.574>at <00:27:53.701>this, <00:27:53.828>there's <00:27:53.955>money <00:27:54.083>to <00:27:54.210>be <00:27:54.337>saved <00:27:54.465>here

592
00:27:57.525 --> 00:28:00.565
<00:27:57.525>because <00:27:57.700>build <00:27:57.875>minutes <00:27:58.050>on <00:27:58.225>GitHub <00:27:58.400>costs <00:27:58.575>about <00:27:58.750>10 <00:27:58.925>times

593
00:28:00.705 --> 00:28:02.685
<00:28:00.705>as <00:28:00.985>much <00:28:01.264>as <00:28:01.544>a <00:28:01.824>virtual <00:28:02.105>server.

594
00:28:04.665 --> 00:28:07.405
<00:28:04.665>But <00:28:04.865>someone <00:28:05.065>needs <00:28:05.264>to <00:28:05.465>maintain <00:28:05.665>these, <00:28:05.865>scale <00:28:06.065>them,

595
00:28:07.825 --> 00:28:09.005
<00:28:07.825>set <00:28:08.037>them <00:28:08.249>up <00:28:08.462>and <00:28:08.674>run <00:28:08.887>them.

596
00:28:09.465 --> 00:28:11.285
<00:28:09.465>And <00:28:09.698>if <00:28:09.931>you're <00:28:10.165>a <00:28:10.398>small <00:28:10.631>development <00:28:10.865>team,

597
00:28:11.285 --> 00:28:13.125
<00:28:11.285>that <00:28:11.635>can <00:28:11.985>take <00:28:12.335>serious <00:28:12.685>effort.

598
00:28:13.785 --> 00:28:15.245
<00:28:13.785>If <00:28:14.113>you're <00:28:14.442>a <00:28:14.770>larger <00:28:15.099>organization,

599
00:28:15.245 --> 00:28:17.405
<00:28:15.245>maybe <00:28:15.400>you <00:28:15.556>already <00:28:15.711>have <00:28:15.867>a <00:28:16.022>team <00:28:16.178>that <00:28:16.333>can <00:28:16.489>do <00:28:16.645>this

600
00:28:17.825 --> 00:28:19.205
<00:28:17.825>and <00:28:18.135>the <00:28:18.446>cost <00:28:18.756>isn't <00:28:19.067>really

601
00:28:19.235 --> 00:28:21.125
<00:28:19.235>that <00:28:19.435>much <00:28:19.635>more <00:28:19.834>than <00:28:20.034>what <00:28:20.235>you <00:28:20.435>already <00:28:20.635>have.

602
00:28:23.105 --> 00:28:27.845
<00:28:23.105>So <00:28:23.280>quick <00:28:23.455>recap. <00:28:23.630>Anti <00:28:23.805>factor <00:28:23.980>number <00:28:24.155>one, <00:28:24.330>the <00:28:24.505>ritual.

603
00:28:28.415 --> 00:28:30.925
<00:28:28.415>Don't <00:28:28.695>have <00:28:28.975>your <00:28:29.254>pipelines <00:28:29.534>be <00:28:29.815>ritualistic.

604
00:28:33.015 --> 00:28:35.565
<00:28:33.015>Don't <00:28:33.248>the <00:28:33.481>war <00:28:33.715>all <00:28:33.948>your <00:28:34.181>artifacts <00:28:34.415>forever.

605
00:28:35.995 --> 00:28:38.485
<00:28:35.995>Pick <00:28:36.169>the <00:28:36.344>ones <00:28:36.520>you <00:28:36.695>need, <00:28:36.870>throw <00:28:37.044>away <00:28:37.219>the <00:28:37.395>rest.

606
00:28:39.535 --> 00:28:42.245
<00:28:39.535>Don't <00:28:39.735>order <00:28:39.935>your <00:28:40.135>pipelines <00:28:40.335>by <00:28:40.535>what <00:28:40.735>feels <00:28:40.935>good.

607
00:28:42.395 --> 00:28:45.125
<00:28:42.395>Make <00:28:42.550>sure <00:28:42.706>you <00:28:42.861>have <00:28:43.017>some <00:28:43.172>sort <00:28:43.328>of <00:28:43.483>argument <00:28:43.639>for <00:28:43.795>in

608
00:28:45.125 --> 00:28:46.525
<00:28:45.125>what <00:28:45.377>order <00:28:45.629>you <00:28:45.881>run <00:28:46.133>your <00:28:46.385>steps

609
00:28:46.945 --> 00:28:49.005
<00:28:46.945>and <00:28:47.145>make <00:28:47.345>them <00:28:47.544>fail <00:28:47.745>as <00:28:47.945>fast <00:28:48.145>as <00:28:48.345>possible.

610
00:28:49.905 --> 00:28:51.325
<00:28:49.905>Uh, <00:28:50.224>don't <00:28:50.544>have <00:28:50.863>one <00:28:51.183>pipeline.

611
00:28:52.065 --> 00:28:55.045
<00:28:52.065>Use <00:28:52.415>parallel <00:28:52.765>pipelines, <00:28:53.115>uh, <00:28:53.465>subdivide.

612
00:28:55.895 --> 00:28:58.445
<00:28:55.895>Don't <00:28:56.070>start <00:28:56.245>from <00:28:56.420>scratch <00:28:56.595>all <00:28:56.770>the <00:28:56.945>time, <00:28:57.120>every <00:28:57.295>time.

613
00:28:58.785 --> 00:29:01.605
<00:28:58.785>Use <00:28:58.985>tooling <00:28:59.185>images, <00:28:59.385>use <00:28:59.585>caching <00:28:59.785>to <00:28:59.985>make <00:29:00.185>sure

614
00:29:01.605 --> 00:29:03.685
<00:29:01.605>that <00:29:01.838>you <00:29:02.071>keep <00:29:02.305>the, <00:29:02.538>the <00:29:02.771>run <00:29:03.005>time,

615
00:29:03.705 --> 00:29:05.405
<00:29:03.705>the <00:29:03.938>feedback <00:29:04.171>loop <00:29:04.405>as <00:29:04.638>short <00:29:04.871>as <00:29:05.105>possible.

616
00:29:05.825 --> 00:29:08.285
<00:29:05.825>And <00:29:05.965>when <00:29:06.105>you <00:29:06.245>do <00:29:06.385>that, <00:29:06.525>make <00:29:06.665>sure <00:29:06.805>you <00:29:06.945>don't <00:29:07.085>break <00:29:07.225>other

617
00:29:08.285 --> 00:29:10.085
<00:29:08.285>people's <00:29:08.485>pipelines <00:29:08.685>and <00:29:08.885>run <00:29:09.085>at <00:29:09.285>the <00:29:09.485>same <00:29:09.685>time.

618
00:29:10.905 --> 00:29:13.765
<00:29:10.905>And <00:29:11.060>make <00:29:11.216>sure <00:29:11.371>your <00:29:11.527>build <00:29:11.682>pipe, <00:29:11.838>build <00:29:11.993>servers <00:29:12.149>are <00:29:12.305>quick.

619
00:29:15.795 --> 00:29:19.245
<00:29:15.795>Alright, <00:29:15.950>that's <00:29:16.106>it <00:29:16.261>for <00:29:16.417>me. <00:29:16.572>Uh, <00:29:16.728>we <00:29:16.883>have <00:29:17.039>40 <00:29:17.195>seconds.

620
00:29:19.525 --> 00:29:22.125
<00:29:19.525>I <00:29:19.665>don't <00:29:19.805>think <00:29:19.945>we <00:29:20.085>have <00:29:20.225>time <00:29:20.365>for <00:29:20.505>any <00:29:20.645>questions. <00:29:20.785>I'm <00:29:20.925>sorry.

621
00:29:22.315 --> 00:29:26.285
<00:29:22.315>I'll <00:29:22.431>be <00:29:22.548>up <00:29:22.665>here <00:29:22.781>and <00:29:22.898>if <00:29:23.015>you <00:29:23.131>wanna <00:29:23.248>connect <00:29:23.365>with <00:29:23.481>me, <00:29:23.598>follow <00:29:23.715>me.

622
00:29:26.905 --> 00:29:28.805
<00:29:26.905>The <00:29:27.185>QR <00:29:27.465>code <00:29:27.745>goes <00:29:28.024>to <00:29:28.305>LinkedIn

623
00:29:29.465 --> 00:29:31.445
<00:29:29.465>and <00:29:29.698>uh, <00:29:29.931>I <00:29:30.165>promise <00:29:30.398>it's <00:29:30.631>not <00:29:30.865>malware.

624
00:29:32.055 --> 00:29:32.485
<00:29:32.055>Thank <00:29:32.442>you.