fa-harness-tools 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +9 -2
- data/exe/check-schedule +23 -2
- data/fa-harness-tools.gemspec +1 -0
- data/lib/fa-harness-tools.rb +2 -0
- data/lib/fa-harness-tools/check_schedule.rb +8 -12
- data/lib/fa-harness-tools/schedule.rb +22 -0
- data/lib/fa-harness-tools/version.rb +1 -1
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 51253c635049f814f42fcac831fd937ed713254a29547cf5915fc2861848a52e
|
4
|
+
data.tar.gz: ed786f440ef207a1f2d6b4c920d82f673c1726c81571f4d0cec692f02a2c42a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3cb5bc18ffb6355a629de71c8220f851e12a85814e59549f8cfd7b259d4425d4422f81e0d85dc2e80e05e9fa76c5d5b3dfb12fe161fc61a9b87550dbd61300af
|
7
|
+
data.tar.gz: 73877cc9224058d573a41b3ab1b34e67d0fe8bbf06c17a408b37f646d552d7b627fab219d2b042654297b9ccb9dae09fbc4f1d833a6fae3e798b3603970fc320
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fa-harness-tools (1.
|
4
|
+
fa-harness-tools (1.2.0)
|
5
|
+
fugit (~> 1.3)
|
5
6
|
octokit (~> 4.0)
|
6
7
|
pastel (~> 0.7)
|
7
8
|
tzinfo (~> 2.0)
|
@@ -15,8 +16,13 @@ GEM
|
|
15
16
|
concurrent-ruby (1.1.6)
|
16
17
|
diff-lcs (1.3)
|
17
18
|
equatable (0.6.1)
|
19
|
+
et-orbi (1.2.4)
|
20
|
+
tzinfo
|
18
21
|
faraday (1.0.1)
|
19
22
|
multipart-post (>= 1.2, < 3)
|
23
|
+
fugit (1.3.5)
|
24
|
+
et-orbi (~> 1.1, >= 1.1.8)
|
25
|
+
raabro (~> 1.1)
|
20
26
|
multipart-post (2.1.1)
|
21
27
|
octokit (4.18.0)
|
22
28
|
faraday (>= 0.9)
|
@@ -25,6 +31,7 @@ GEM
|
|
25
31
|
equatable (~> 0.6)
|
26
32
|
tty-color (~> 0.5)
|
27
33
|
public_suffix (4.0.5)
|
34
|
+
raabro (1.3.1)
|
28
35
|
rake (13.0.1)
|
29
36
|
rspec (3.9.0)
|
30
37
|
rspec-core (~> 3.9.0)
|
@@ -60,4 +67,4 @@ DEPENDENCIES
|
|
60
67
|
timecop (~> 0.9)
|
61
68
|
|
62
69
|
BUNDLED WITH
|
63
|
-
1.
|
70
|
+
1.17.2
|
data/exe/check-schedule
CHANGED
@@ -3,11 +3,32 @@
|
|
3
3
|
require "fa-harness-tools"
|
4
4
|
require "optparse"
|
5
5
|
|
6
|
-
options = {
|
6
|
+
options = {
|
7
|
+
schedules: [],
|
8
|
+
timezone: "Europe/London",
|
9
|
+
}
|
7
10
|
OptionParser.new do |opts|
|
8
11
|
opts.banner = "Usage: check-schedule [options]"
|
12
|
+
|
13
|
+
opts.on("--schedule CRON", "Schedule defines a window in which a deployment can take place. Accepts cron syntax, e.g. '* 9-15 * * mon-thu'") do |v|
|
14
|
+
options[:schedules] << v
|
15
|
+
end
|
16
|
+
|
17
|
+
opts.on("--timezone TIMEZONE", "Specify the timezone which the schedule will be checked in, e.g. 'Europe/London'") do |v|
|
18
|
+
options[:timezone] = v
|
19
|
+
end
|
9
20
|
end.parse!
|
10
21
|
|
11
|
-
|
22
|
+
def schedules(options)
|
23
|
+
if options[:schedules].length == 0
|
24
|
+
options[:schedules] = [
|
25
|
+
"* 9-15 * * mon-thu",
|
26
|
+
"* 9-11 * * fri",
|
27
|
+
]
|
28
|
+
end
|
29
|
+
options[:schedules].map { |schedule| FaHarnessTools::Schedule.new(schedule: schedule.to_s) }
|
30
|
+
end
|
31
|
+
|
32
|
+
result = FaHarnessTools::CheckSchedule.new(timezone: options[:timezone], schedules: schedules(options)).verify?
|
12
33
|
|
13
34
|
exit result ? 0 : 1
|
data/fa-harness-tools.gemspec
CHANGED
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.add_runtime_dependency "pastel", "~> 0.7"
|
31
31
|
spec.add_runtime_dependency "tzinfo", "~> 2.0"
|
32
32
|
spec.add_runtime_dependency "tzinfo-data", "~> 1.0"
|
33
|
+
spec.add_runtime_dependency "fugit", "~> 1.3"
|
33
34
|
|
34
35
|
spec.add_development_dependency "bundler", "~> 1.0"
|
35
36
|
spec.add_development_dependency "rake", "~> 13.0"
|
data/lib/fa-harness-tools.rb
CHANGED
@@ -3,10 +3,12 @@ require "fa-harness-tools/check_branch_protection"
|
|
3
3
|
require "fa-harness-tools/check_forward_deploy"
|
4
4
|
require "fa-harness-tools/check_recent_deploy"
|
5
5
|
require "fa-harness-tools/check_schedule"
|
6
|
+
require "fa-harness-tools/schedule"
|
6
7
|
require "fa-harness-tools/github_client"
|
7
8
|
require "fa-harness-tools/harness_context"
|
8
9
|
require "fa-harness-tools/version"
|
9
10
|
|
10
11
|
module FaHarnessTools
|
11
12
|
LookupError = Class.new(StandardError)
|
13
|
+
InvalidScheduleError = Class.new(StandardError)
|
12
14
|
end
|
@@ -3,14 +3,13 @@ require "tzinfo"
|
|
3
3
|
|
4
4
|
module FaHarnessTools
|
5
5
|
# Check against the time of day so you can restrict deploying to sensible
|
6
|
-
# hours.
|
7
|
-
#
|
8
|
-
# Restricts to Mon-Thu from 9am to 4pm, Fri from 9am to 12pm.
|
6
|
+
# hours.
|
9
7
|
class CheckSchedule
|
10
|
-
def initialize(timezone:
|
8
|
+
def initialize(timezone:, schedules:)
|
11
9
|
tz = TZInfo::Timezone.get(timezone)
|
12
10
|
@timezone = timezone
|
13
11
|
@now = tz.to_local(Time.now.utc)
|
12
|
+
@schedules = schedules
|
14
13
|
@logger = CheckLogger.new(
|
15
14
|
name: "Check deployment schedule",
|
16
15
|
description: "Only allow deployments within certain times of the day",
|
@@ -22,19 +21,16 @@ module FaHarnessTools
|
|
22
21
|
@logger.info("operating in the #{@timezone} timezone")
|
23
22
|
@logger.info("local time is #{@now}")
|
24
23
|
|
25
|
-
permitted =
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
permitted = true if @now.hour >= 9 && @now.hour < 16
|
30
|
-
when 5
|
31
|
-
@logger.info("deployments are allowed between 9am to 12pm today (Fri)")
|
32
|
-
permitted = true if @now.hour >= 9 && @now.hour < 12
|
24
|
+
permitted = @schedules.any? do |schedule|
|
25
|
+
can_run = schedule.can_run?(time: @now)
|
26
|
+
@logger.info("deployments are allowed due to the following schedule: #{schedule.to_s}") if can_run
|
27
|
+
can_run
|
33
28
|
end
|
34
29
|
|
35
30
|
if permitted
|
36
31
|
@logger.pass "inside the deployment schedule"
|
37
32
|
else
|
33
|
+
@logger.info "failed to match any schedule #{@schedules.map(&:to_s).join(", ")}"
|
38
34
|
@logger.fail "outside the deployment schedule"
|
39
35
|
end
|
40
36
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'fugit'
|
2
|
+
|
3
|
+
module FaHarnessTools
|
4
|
+
# Creates a schedule which can be used to check if a change
|
5
|
+
# should be deployed.
|
6
|
+
class Schedule
|
7
|
+
def initialize(schedule:)
|
8
|
+
@schedule = schedule
|
9
|
+
@cron_schedule = Fugit.parse(schedule)
|
10
|
+
raise InvalidScheduleError, "'#{schedule}' can not be parsed" unless @cron_schedule
|
11
|
+
end
|
12
|
+
|
13
|
+
def can_run?(time:)
|
14
|
+
return false unless @cron_schedule.day_match?(time)
|
15
|
+
return @cron_schedule.hour_match?(time)
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_s
|
19
|
+
return @schedule
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fa-harness-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- FreeAgent
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05-
|
11
|
+
date: 2020-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: octokit
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: fugit
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.3'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.3'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: bundler
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -165,6 +179,7 @@ files:
|
|
165
179
|
- lib/fa-harness-tools/check_schedule.rb
|
166
180
|
- lib/fa-harness-tools/github_client.rb
|
167
181
|
- lib/fa-harness-tools/harness_context.rb
|
182
|
+
- lib/fa-harness-tools/schedule.rb
|
168
183
|
- lib/fa-harness-tools/version.rb
|
169
184
|
homepage: https://github.com/fac/fa-harness-tools
|
170
185
|
licenses:
|