arduino_ci 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.yardopts +1 -0
- data/README.md +39 -0
- data/lib/arduino_ci.rb +124 -0
- data/lib/arduino_ci/version.rb +3 -0
- metadata +116 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0c01ddca13fd4bd941dcff9e9faeeae700f184bbf647876d520c7ccfce0c87b3
|
4
|
+
data.tar.gz: 974ce43ef7eba01113b9470750c78ad4cc5f81f0296f72f18ce43def9ad1c597
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a044d9ab06badda8a648f189786c14209d7bee59d4ba299dc8790bd29e54adfd107f15a53fcb28d7ad7f286c6daf3e559f6a09b15b3f625c5344c400b0a4c5e8
|
7
|
+
data.tar.gz: f134b211ce71483ee88794a8a9d9f742deed82ee3d93ccecbbdd745ff53af12d6b44f71e2480c7ea98ce60d62bb28f0553c22b773bd6376ea7854bae29f19c9c
|
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
lib/arduino_ci.rb lib/**/*.rb
|
data/README.md
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
[](https://rubygems.org/gems/arduino_ci)
|
2
|
+
[](https://travis-ci.org/ifreecarve/arduino_ci)
|
3
|
+
[](http://www.rubydoc.info/gems/arduino_ci/)
|
4
|
+
|
5
|
+
# ArduinoCI Ruby gem (`arduino_ci`)
|
6
|
+
|
7
|
+
[Arduino CI](https://github.com/ifreecarve/arduino_ci) is a Ruby gem for executing Continuous Integration (CI) tests on an Arduino library -- both locally and as part of a service like Travis CI.
|
8
|
+
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
Add this line to your application's Gemfile:
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
gem 'arduino_ci'
|
16
|
+
```
|
17
|
+
|
18
|
+
And then execute:
|
19
|
+
|
20
|
+
$ bundle
|
21
|
+
|
22
|
+
Or install it yourself as:
|
23
|
+
|
24
|
+
$ gem install arduino_ci
|
25
|
+
|
26
|
+
|
27
|
+
## Usage
|
28
|
+
|
29
|
+
TODO: Write usage instructions here, based on other TODO of writing the actual gem.
|
30
|
+
|
31
|
+
|
32
|
+
## Author
|
33
|
+
|
34
|
+
This gem was written by Ian Katz (ifreecarve@gmail.com) in 2018. It's released under the Apache 2.0 license.
|
35
|
+
|
36
|
+
|
37
|
+
## See Also
|
38
|
+
|
39
|
+
* [Contributing](CONTRIBUTING.md)
|
data/lib/arduino_ci.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
require "arduino_ci/version"
|
2
|
+
|
3
|
+
require 'singleton'
|
4
|
+
|
5
|
+
# Cross-platform way of finding an executable in the $PATH.
|
6
|
+
# via https://stackoverflow.com/a/5471032/2063546
|
7
|
+
# which('ruby') #=> /usr/bin/ruby
|
8
|
+
def which(cmd)
|
9
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
10
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
11
|
+
exts.each do |ext|
|
12
|
+
exe = File.join(path, "#{cmd}#{ext}")
|
13
|
+
return exe if File.executable?(exe) && !File.directory?(exe)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
|
19
|
+
# ArduinoCI contains classes for automated testing of Arduino code on the command line
|
20
|
+
# @author Ian Katz <ifreecarve@gmail.com>
|
21
|
+
module ArduinoCI
|
22
|
+
|
23
|
+
# Wrap the Arduino executable. This requires, in some cases, a faked display.
|
24
|
+
class ArduinoCmd
|
25
|
+
|
26
|
+
# create as many ArduinoCmds as you like, but we need one and only one display manager
|
27
|
+
class DisplayMgr
|
28
|
+
include Singleton
|
29
|
+
attr_reader :enabled
|
30
|
+
|
31
|
+
def initialize
|
32
|
+
@existing = existing_display?
|
33
|
+
@enabled = false
|
34
|
+
@pid = nil
|
35
|
+
end
|
36
|
+
|
37
|
+
# attempt to determine if the machine is running a graphical display (i.e. not Travis)
|
38
|
+
def existing_display?
|
39
|
+
return true if RUBY_PLATFORM.include? "darwin"
|
40
|
+
return true if ENV["DISPLAY"].nil?
|
41
|
+
return true if ENV["DISPLAY"].include? ":"
|
42
|
+
false
|
43
|
+
end
|
44
|
+
|
45
|
+
# enable a virtual display
|
46
|
+
def enable
|
47
|
+
return @enabled = true if @existing # silent no-op if built in display
|
48
|
+
return unless @pid.nil?
|
49
|
+
|
50
|
+
@enabled = true
|
51
|
+
@pid = fork do
|
52
|
+
puts "Forking Xvfb"
|
53
|
+
system("Xvfb", ":1", "-ac", "-screen", "0", "1280x1024x16")
|
54
|
+
puts "Xvfb unexpectedly quit!"
|
55
|
+
end
|
56
|
+
sleep(3) # TODO: test a connection to the X server?
|
57
|
+
end
|
58
|
+
|
59
|
+
# disable the virtual display
|
60
|
+
def disable
|
61
|
+
return @enabled = false if @existing # silent no-op if built in display
|
62
|
+
return if @pid.nil?
|
63
|
+
|
64
|
+
begin
|
65
|
+
Process.kill 9, @pid
|
66
|
+
ensure
|
67
|
+
Process.wait @pid
|
68
|
+
@pid = nil
|
69
|
+
end
|
70
|
+
puts "Xvfb killed"
|
71
|
+
end
|
72
|
+
|
73
|
+
# Enable a virtual display for the duration of the given block
|
74
|
+
def with_display
|
75
|
+
enable
|
76
|
+
begin
|
77
|
+
yield environment
|
78
|
+
ensure
|
79
|
+
disable
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def environment
|
84
|
+
return nil unless @existing || @enabled
|
85
|
+
return {} if @existing
|
86
|
+
{ DISPLAY => ":1.0" }
|
87
|
+
end
|
88
|
+
|
89
|
+
# On finalize, ensure child process is ended
|
90
|
+
def self.finalize
|
91
|
+
disable
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
class << self
|
96
|
+
protected :new
|
97
|
+
|
98
|
+
# attempt to find a workable Arduino executable across platforms
|
99
|
+
def guess_executable_location
|
100
|
+
osx_place = "/Applications/Arduino.app/Contents/MacOS/Arduino"
|
101
|
+
places = {
|
102
|
+
"arduino" => !which("arduino").nil?,
|
103
|
+
osx_place => (File.exist? osx_place),
|
104
|
+
}
|
105
|
+
places.each { |k, v| return k if v }
|
106
|
+
nil
|
107
|
+
end
|
108
|
+
|
109
|
+
def autolocate
|
110
|
+
ret = new
|
111
|
+
ret.path = guess_executable_location
|
112
|
+
ret
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
attr_accessor :path
|
117
|
+
|
118
|
+
def initialize
|
119
|
+
@display_mgr = DisplayMgr::instance
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
metadata
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: arduino_ci
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ian Katz
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-01-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.15'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.15'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rubocop
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 0.46.0
|
51
|
+
type: :development
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - "~>"
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 0.46.0
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: yard
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0.8'
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0.8'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - "~>"
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0.8'
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0.8'
|
81
|
+
description: ''
|
82
|
+
email:
|
83
|
+
- ifreecarve@gmail.com
|
84
|
+
executables: []
|
85
|
+
extensions: []
|
86
|
+
extra_rdoc_files: []
|
87
|
+
files:
|
88
|
+
- ".yardopts"
|
89
|
+
- README.md
|
90
|
+
- lib/arduino_ci.rb
|
91
|
+
- lib/arduino_ci/version.rb
|
92
|
+
homepage: http://github.com/ifreecarve/arduino_ci
|
93
|
+
licenses:
|
94
|
+
- Apache-2.0
|
95
|
+
metadata: {}
|
96
|
+
post_install_message:
|
97
|
+
rdoc_options: []
|
98
|
+
require_paths:
|
99
|
+
- lib
|
100
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
requirements: []
|
111
|
+
rubyforge_project:
|
112
|
+
rubygems_version: 2.7.4
|
113
|
+
signing_key:
|
114
|
+
specification_version: 4
|
115
|
+
summary: Tools for building and unit testing Arduino libraries
|
116
|
+
test_files: []
|