whenever 1.0.0 → 1.1.2
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 +4 -4
- data/.github/dependabot.yml +10 -0
- data/.github/workflows/ci.yml +84 -0
- data/.gitignore +13 -4
- data/Appraisals +60 -10
- data/CHANGELOG.md +61 -0
- data/CONTRIBUTING.md +38 -0
- data/Gemfile +7 -0
- data/Makefile +5 -0
- data/README.md +33 -12
- data/bin/whenever +9 -4
- data/gemfiles/activesupport5.0.gemfile +5 -1
- data/gemfiles/activesupport5.1.gemfile +5 -1
- data/gemfiles/activesupport5.2.gemfile +6 -2
- data/gemfiles/activesupport6.0.gemfile +17 -0
- data/gemfiles/activesupport6.1.gemfile +17 -0
- data/gemfiles/activesupport7.0.gemfile +11 -0
- data/gemfiles/activesupport7.1.gemfile +11 -0
- data/gemfiles/activesupport7.2.gemfile +11 -0
- data/gemfiles/activesupport8.0.gemfile +11 -0
- data/gemfiles/activesupport8.1.gemfile +11 -0
- data/lib/whenever/capistrano/v3/tasks/whenever.rake +1 -1
- data/lib/whenever/command_line.rb +24 -8
- data/lib/whenever/job.rb +2 -1
- data/lib/whenever/job_list.rb +3 -2
- data/lib/whenever/setup.rb +3 -2
- data/lib/whenever/version.rb +1 -1
- data/lib/whenever.rb +8 -0
- data/test/functional/command_line_test.rb +1 -1
- data/test/functional/output_default_defined_jobs_test.rb +14 -0
- data/test/functional/output_defined_job_test.rb +28 -0
- data/test/functional/output_description_test.rb +25 -0
- data/test/test_case.rb +2 -2
- data/test/test_helper.rb +5 -1
- data/whenever.gemspec +25 -24
- metadata +21 -81
- data/.travis.yml +0 -21
- data/gemfiles/activesupport4.1.gemfile +0 -7
- data/gemfiles/activesupport4.2.gemfile +0 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e6e3f0d94253d0ac6d5a7f856afeb690b25f83a551e74581ebcc3cb0320855bc
|
|
4
|
+
data.tar.gz: 8d8ccccb89a2d7e4c5dd8d6744314888c88928a0bf7b6b3ed2bc7e195cae4290
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f7942baf77e31bb83add51eea178e5ff11d724196a23cc45a47668813acb8ce428f1ab27ca806544ee935e67b8d164a6586e0a6bfda8eb33afb2ef0ea33c88d8
|
|
7
|
+
data.tar.gz: 30691f3aa03c58df894d3d516c21fedd9a6a3d23563ebaa9d267977b59a822c37071f4fc3663aae115f008865f426a899ce436badbb6883643aaa24b7e2a146c
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
name: Ruby CI
|
|
2
|
+
on:
|
|
3
|
+
pull_request:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
jobs:
|
|
7
|
+
test:
|
|
8
|
+
runs-on: ${{ matrix.os }}
|
|
9
|
+
strategy:
|
|
10
|
+
fail-fast: false
|
|
11
|
+
matrix:
|
|
12
|
+
os: [ubuntu-latest, macos-latest]
|
|
13
|
+
ruby-version: [ '2.4', '2.5', '2.6', '2.7', '3.0', '3.0', '3.2', '3.3', '3.4', '4.0', 'jruby-9', 'jruby-10']
|
|
14
|
+
# CRuby < 2.6 does not support macos-arm64, so test those on amd64 instead
|
|
15
|
+
exclude:
|
|
16
|
+
- os: macos-latest
|
|
17
|
+
ruby-version: '2.4'
|
|
18
|
+
- os: macos-latest
|
|
19
|
+
ruby-version: '2.5'
|
|
20
|
+
include:
|
|
21
|
+
- os: macos-15-intel
|
|
22
|
+
ruby-version: '2.4'
|
|
23
|
+
- os: macos-15-intel
|
|
24
|
+
ruby-version: '2.5'
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v6
|
|
27
|
+
name: Set up Ruby ${{ matrix.ruby-version }}
|
|
28
|
+
- uses: ruby/setup-ruby@v1
|
|
29
|
+
env:
|
|
30
|
+
JRUBY_OPTS: "--debug"
|
|
31
|
+
with:
|
|
32
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
33
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
|
34
|
+
- name: Run tests
|
|
35
|
+
run: bundle exec rake test
|
|
36
|
+
env:
|
|
37
|
+
JRUBY_OPTS: "--debug"
|
|
38
|
+
|
|
39
|
+
# Test with activesupport
|
|
40
|
+
test-activesupport:
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
strategy:
|
|
43
|
+
fail-fast: false
|
|
44
|
+
matrix:
|
|
45
|
+
ruby-version: ['2.7', '3.0', '3.0', '3.2', '3.3', '3.4', '4.0']
|
|
46
|
+
rails-version: ['6.0', '6.1', '7.0', '7.1', '7.2', '8.0', '8.1']
|
|
47
|
+
include:
|
|
48
|
+
- ruby-version: 2.7
|
|
49
|
+
rails-version: '5.0'
|
|
50
|
+
- ruby-version: 2.7
|
|
51
|
+
rails-version: '5.1'
|
|
52
|
+
- ruby-version: 2.7
|
|
53
|
+
rails-version: '5.2'
|
|
54
|
+
exclude:
|
|
55
|
+
# rails 8.1: support ruby 3.2+
|
|
56
|
+
- ruby-version: 2.7
|
|
57
|
+
rails-version: '8.1'
|
|
58
|
+
- ruby-version: 3.0
|
|
59
|
+
rails-version: '8.1'
|
|
60
|
+
- ruby-version: 3.1
|
|
61
|
+
rails-version: '8.1'
|
|
62
|
+
# rails 8.0: support ruby 3.2+
|
|
63
|
+
- ruby-version: 2.7
|
|
64
|
+
rails-version: '8.0'
|
|
65
|
+
- ruby-version: 3.0
|
|
66
|
+
rails-version: '8.0'
|
|
67
|
+
- ruby-version: 3.1
|
|
68
|
+
rails-version: '8.0'
|
|
69
|
+
# rails 7.2: support ruby 3.1+
|
|
70
|
+
- ruby-version: 2.7
|
|
71
|
+
rails-version: '7.2'
|
|
72
|
+
- ruby-version: 3.0
|
|
73
|
+
rails-version: '7.2'
|
|
74
|
+
env:
|
|
75
|
+
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/activesupport${{ matrix.rails-version }}.gemfile
|
|
76
|
+
steps:
|
|
77
|
+
- uses: actions/checkout@v6
|
|
78
|
+
name: Set up Ruby ${{ matrix.ruby-version }}
|
|
79
|
+
- uses: ruby/setup-ruby@v1
|
|
80
|
+
with:
|
|
81
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
82
|
+
bundler-cache: true
|
|
83
|
+
- name: Run tests
|
|
84
|
+
run: bundle exec rake test
|
data/.gitignore
CHANGED
data/Appraisals
CHANGED
|
@@ -1,19 +1,69 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
if RUBY_VERSION < "3.0"
|
|
2
|
+
appraise 'activesupport5.0' do
|
|
3
|
+
gem "activesupport", "~> 5.0.0"
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
appraise 'activesupport5.1' do
|
|
7
|
+
gem "activesupport", "~> 5.1.0"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
appraise 'activesupport5.2' do
|
|
11
|
+
gem "activesupport", "~> 5.2.0"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
appraise 'activesupport6.0' do
|
|
16
|
+
gem "activesupport", "~> 6.0.0"
|
|
17
|
+
|
|
18
|
+
# ruby 3.3+
|
|
19
|
+
gem "base64"
|
|
20
|
+
gem "bigdecimal"
|
|
21
|
+
gem "mutex_m"
|
|
22
|
+
# ruby 3.4+
|
|
23
|
+
gem "benchmark"
|
|
24
|
+
gem "logger"
|
|
25
|
+
|
|
26
|
+
# Fix https://github.com/rails/rails/issues/54260
|
|
27
|
+
gem 'concurrent-ruby', "1.3.4"
|
|
3
28
|
end
|
|
4
29
|
|
|
5
|
-
appraise '
|
|
6
|
-
gem "activesupport", "~>
|
|
30
|
+
appraise 'activesupport6.1' do
|
|
31
|
+
gem "activesupport", "~> 6.1.0"
|
|
32
|
+
|
|
33
|
+
# ruby 3.3+
|
|
34
|
+
gem "base64"
|
|
35
|
+
gem "bigdecimal"
|
|
36
|
+
gem "mutex_m"
|
|
37
|
+
# ruby 3.4+
|
|
38
|
+
gem "benchmark"
|
|
39
|
+
gem "logger"
|
|
40
|
+
|
|
41
|
+
# Fix https://github.com/rails/rails/issues/54260
|
|
42
|
+
gem 'concurrent-ruby', "1.3.4"
|
|
7
43
|
end
|
|
8
44
|
|
|
9
|
-
|
|
10
|
-
|
|
45
|
+
if RUBY_VERSION >= "2.7"
|
|
46
|
+
appraise 'activesupport7.0' do
|
|
47
|
+
gem "activesupport", "~> 7.0.0"
|
|
48
|
+
end
|
|
11
49
|
end
|
|
12
50
|
|
|
13
|
-
|
|
14
|
-
|
|
51
|
+
if RUBY_VERSION >= "3.1"
|
|
52
|
+
appraise 'activesupport7.1' do
|
|
53
|
+
gem "activesupport", "~> 7.1.0"
|
|
54
|
+
end
|
|
15
55
|
end
|
|
16
56
|
|
|
17
|
-
|
|
18
|
-
|
|
57
|
+
if RUBY_VERSION >= "3.2"
|
|
58
|
+
appraise 'activesupport7.2' do
|
|
59
|
+
gem "activesupport", "~> 7.2.0"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
appraise 'activesupport8.0' do
|
|
63
|
+
gem "activesupport", "~> 8.0.0"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
appraise 'activesupport8.1' do
|
|
67
|
+
gem "activesupport", "~> 8.1.0"
|
|
68
|
+
end
|
|
19
69
|
end
|
data/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,72 @@
|
|
|
1
1
|
### unreleased
|
|
2
2
|
|
|
3
|
+
|
|
4
|
+
### 1.1.2 / January 18, 2026
|
|
5
|
+
|
|
6
|
+
* Add description as comment in crontab https://github.com/javan/whenever/pull/776
|
|
7
|
+
|
|
8
|
+
* Override global option with group option https://github.com/javan/whenever/pull/822
|
|
9
|
+
|
|
10
|
+
* CI: Add Ruby 4.0 to CI Matrix https://github.com/javan/whenever/pull/872
|
|
11
|
+
|
|
12
|
+
* CI: Use macos-15-intel instead of macos-13 for Ruby 2.4 and 2.5 https://github.com/javan/whenever/pull/871
|
|
13
|
+
|
|
14
|
+
### 1.1.1 / Dec 8, 2025
|
|
15
|
+
|
|
16
|
+
* job_list `.respond_to?` updated to an instance method https://github.com/javan/whenever/pull/830
|
|
17
|
+
|
|
18
|
+
* Update README.md https://github.com/javan/whenever/pull/789
|
|
19
|
+
|
|
20
|
+
* CI: Bump actions/checkout from 5 to 6 https://github.com/javan/whenever/pull/869
|
|
21
|
+
|
|
22
|
+
* CI: Add tests using ActiveSupport to CI https://github.com/javan/whenever/pull/868
|
|
23
|
+
|
|
24
|
+
* Require MFA for gem releases https://github.com/javan/whenever/pull/867
|
|
25
|
+
|
|
26
|
+
### 1.1.0 / Nov 21, 2025
|
|
27
|
+
|
|
28
|
+
* Splat whenever_roles when passing to roles https://github.com/javan/whenever/pull/777
|
|
29
|
+
|
|
30
|
+
* Update README.md https://github.com/javan/whenever/pull/785
|
|
31
|
+
|
|
32
|
+
* Clarify in README that tasks are run in parallel https://github.com/javan/whenever/pull/787
|
|
33
|
+
|
|
34
|
+
* Add note in README that cron is generated with the current user. [Raquel Queiroz] https://github.com/javan/whenever/pull/788
|
|
35
|
+
|
|
36
|
+
* Clarify options and warn about overwriting https://github.com/javan/whenever/pull/791
|
|
37
|
+
|
|
38
|
+
* Set the environment for cron jobs based off the currently set RAILS_ENV env variable. If RAILS_ENV is not set it defaults to production https://github.com/javan/whenever/pull/832
|
|
39
|
+
|
|
40
|
+
* [CHORE] DX: easify getting started contributing https://github.com/javan/whenever/pull/846
|
|
41
|
+
|
|
42
|
+
* CI: Replace travis-ci by Github-Actions https://github.com/javan/whenever/pull/847
|
|
43
|
+
|
|
44
|
+
* Added capability for updating cron without cmd https://github.com/javan/whenever/pull/515
|
|
45
|
+
|
|
46
|
+
* CI: Add Ruby 2.7-3.4 to the CI matrix https://github.com/javan/whenever/pull/858
|
|
47
|
+
|
|
48
|
+
* CI: Add dependabot config for bundler / github-actions https://github.com/javan/whenever/pull/862
|
|
49
|
+
|
|
50
|
+
* Handle crontab output to prevent SIGPIPE when running on CentOS Stream 10 https://github.com/javan/whenever/pull/861
|
|
51
|
+
|
|
52
|
+
* CI: Bump actions/checkout from 4 to 5 https://github.com/javan/whenever/pull/863
|
|
53
|
+
|
|
54
|
+
* Fix typo In test https://github.com/javan/whenever/pull/851
|
|
55
|
+
|
|
56
|
+
* Add changelog_uri to metadata to easily link from rubygems.org https://github.com/javan/whenever/pull/786
|
|
57
|
+
|
|
58
|
+
* Update gemspec format to match Bundler v3.x gemspec template https://github.com/javan/whenever/pull/864
|
|
59
|
+
|
|
60
|
+
* Add to require `whenever/version` https://github.com/javan/whenever/pull/865
|
|
61
|
+
|
|
3
62
|
### 1.0.0 / Jun 13, 2019
|
|
4
63
|
|
|
5
64
|
* First stable release per SemVer.
|
|
6
65
|
|
|
7
66
|
* Removes support for versions of Ruby which are no longer supported by the Ruby project.
|
|
8
67
|
|
|
68
|
+
* Bugfix: Splat `whenever_roles` when passing to `roles` to allow definition of multiple whenever roles [samuelokrent](https://github.com/javan/whenever/pull/777)
|
|
69
|
+
|
|
9
70
|
### 0.11.0 / April 23, 2019
|
|
10
71
|
|
|
11
72
|
* Add support for mapping Range objects to cron range syntax [Tim Craft](https://github.com/javan/whenever/pull/725)
|
data/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
## How to contribute to Whenever
|
|
2
|
+
|
|
3
|
+
#### **Did you find a bug?**
|
|
4
|
+
|
|
5
|
+
* **Ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/your/whenever/issues).
|
|
6
|
+
|
|
7
|
+
* If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/your/whenever/issues/new). Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring.
|
|
8
|
+
|
|
9
|
+
#### **Did you write a patch that fixes a bug?**
|
|
10
|
+
|
|
11
|
+
* Open a new GitHub pull request with the patch.
|
|
12
|
+
|
|
13
|
+
* Ensure the PR description clearly describes the problem and solution. Include the relevant issue number if applicable.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
#### **Do you have questions about the source code?**
|
|
17
|
+
|
|
18
|
+
* Ask any question about how to use Whenever in the [whenever issues](https://github.com/javan/whenever/issues).
|
|
19
|
+
|
|
20
|
+
#### **Do you want to contribute to the Whenever documentation?**
|
|
21
|
+
|
|
22
|
+
Whenever is a volunteer effort. We encourage you to pitch in!
|
|
23
|
+
|
|
24
|
+
Thanks! :heart: :heart: :heart:
|
|
25
|
+
|
|
26
|
+
Whenever Team
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
## Setup
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
$ bundle install
|
|
33
|
+
```
|
|
34
|
+
## Run tests
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
$ make test
|
|
38
|
+
```
|
data/Gemfile
CHANGED
data/Makefile
ADDED
data/README.md
CHANGED
|
@@ -16,19 +16,21 @@ gem 'whenever', require: false
|
|
|
16
16
|
|
|
17
17
|
```sh
|
|
18
18
|
$ cd /apps/my-great-project
|
|
19
|
-
$ wheneverize .
|
|
19
|
+
$ bundle exec wheneverize .
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
This will create an initial `config/schedule.rb` file for you (as long as the config folder is already present in your project).
|
|
23
23
|
|
|
24
24
|
### The `whenever` command
|
|
25
25
|
|
|
26
|
+
The `whenever` command will simply show you your `schedule.rb` file converted to cron syntax. It does not read or write your crontab file.
|
|
27
|
+
|
|
26
28
|
```sh
|
|
27
29
|
$ cd /apps/my-great-project
|
|
28
|
-
$ whenever
|
|
30
|
+
$ bundle exec whenever
|
|
29
31
|
```
|
|
30
32
|
|
|
31
|
-
|
|
33
|
+
To write your crontab file for your jobs, execute this command:
|
|
32
34
|
|
|
33
35
|
```sh
|
|
34
36
|
$ whenever --update-crontab
|
|
@@ -41,6 +43,8 @@ $ whenever --load-file config/my_schedule.rb # set the schedule file
|
|
|
41
43
|
$ whenever --crontab-command 'sudo crontab' # override the crontab command
|
|
42
44
|
```
|
|
43
45
|
|
|
46
|
+
> Note: If you run the whenever --update-crontab without passing the --user attribute, cron will be generated by the current user. This mean tasks that needs other user permission will fail.
|
|
47
|
+
|
|
44
48
|
You can list installed cron jobs using `crontab -l`.
|
|
45
49
|
|
|
46
50
|
Run `whenever --help` for a complete list of options for selecting the schedule to use, setting variables in the schedule, etc.
|
|
@@ -49,6 +53,7 @@ Run `whenever --help` for a complete list of options for selecting the schedule
|
|
|
49
53
|
|
|
50
54
|
```ruby
|
|
51
55
|
every 3.hours do # 1.minute 1.day 1.week 1.month 1.year is also supported
|
|
56
|
+
# the following tasks are run in parallel (not in sequence)
|
|
52
57
|
runner "MyModel.some_process"
|
|
53
58
|
rake "my:rake:task"
|
|
54
59
|
command "/usr/bin/my_great_command"
|
|
@@ -101,9 +106,9 @@ The default job types that ship with Whenever are defined like so:
|
|
|
101
106
|
|
|
102
107
|
```ruby
|
|
103
108
|
job_type :command, ":task :output"
|
|
104
|
-
job_type :rake, "cd :path && :environment_variable=:environment
|
|
105
|
-
job_type :
|
|
106
|
-
job_type :
|
|
109
|
+
job_type :rake, "cd :path && :environment_variable=:environment :bundle_command rake :task --silent :output"
|
|
110
|
+
job_type :script, "cd :path && :environment_variable=:environment :bundle_command script/:task :output"
|
|
111
|
+
job_type :runner, "cd :path && :bundle_command :runner_command -e :environment ':task' :output"
|
|
107
112
|
```
|
|
108
113
|
|
|
109
114
|
Pre-Rails 3 apps and apps that don't use Bundler will redefine the `rake` and `runner` jobs respectively to function correctly.
|
|
@@ -175,6 +180,26 @@ every 3.hours do
|
|
|
175
180
|
end
|
|
176
181
|
```
|
|
177
182
|
|
|
183
|
+
### Adding comments to crontab
|
|
184
|
+
|
|
185
|
+
A description can be added to a job that will be included in the crontab as a comment above the cron entry.
|
|
186
|
+
|
|
187
|
+
Example: A single line description:
|
|
188
|
+
|
|
189
|
+
```ruby
|
|
190
|
+
every 1.hours, description: "My job description" do
|
|
191
|
+
command "/usr/bin/my_great_command"
|
|
192
|
+
end
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Example: A multi line description:
|
|
196
|
+
|
|
197
|
+
```ruby
|
|
198
|
+
every 1.hours, description: "My job description\nhas multiple lines" do
|
|
199
|
+
command "/usr/bin/my_great_command"
|
|
200
|
+
end
|
|
201
|
+
```
|
|
202
|
+
|
|
178
203
|
### Capistrano integration
|
|
179
204
|
|
|
180
205
|
Use the built-in Capistrano recipe for easy crontab updates with deploys. For Capistrano V3, see the next section.
|
|
@@ -185,7 +210,7 @@ In your "config/deploy.rb" file:
|
|
|
185
210
|
require "whenever/capistrano"
|
|
186
211
|
```
|
|
187
212
|
|
|
188
|
-
Take a look at the recipe for options you can set. <https://github.com/javan/whenever/blob/
|
|
213
|
+
Take a look at the recipe for options you can set. <https://github.com/javan/whenever/blob/main/lib/whenever/capistrano/v2/recipes.rb>
|
|
189
214
|
For example, if you're using bundler do this:
|
|
190
215
|
|
|
191
216
|
```ruby
|
|
@@ -225,7 +250,7 @@ In your "Capfile" file:
|
|
|
225
250
|
require "whenever/capistrano"
|
|
226
251
|
```
|
|
227
252
|
|
|
228
|
-
Take a look at the [load:defaults task](https://github.com/javan/whenever/blob/
|
|
253
|
+
Take a look at the [load:defaults task](https://github.com/javan/whenever/blob/main/lib/whenever/capistrano/v3/tasks/whenever.rake) (bottom of file) for options you can set. For example, to namespace the crontab entries by application and stage do this in your "config/deploy.rb" file:
|
|
229
254
|
|
|
230
255
|
```ruby
|
|
231
256
|
set :whenever_identifier, ->{ "#{fetch(:application)}_#{fetch(:stage)}" }
|
|
@@ -322,8 +347,4 @@ It's a little bit dated now, but remains a good introduction.
|
|
|
322
347
|
|
|
323
348
|
----
|
|
324
349
|
|
|
325
|
-
[](http://travis-ci.org/javan/whenever)
|
|
326
|
-
|
|
327
|
-
----
|
|
328
|
-
|
|
329
350
|
Copyright © 2017 Javan Makhmali
|
data/bin/whenever
CHANGED
|
@@ -2,21 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
require 'optparse'
|
|
4
4
|
require 'whenever'
|
|
5
|
-
require 'whenever/version'
|
|
6
5
|
|
|
7
6
|
options = {}
|
|
8
7
|
|
|
9
8
|
OptionParser.new do |opts|
|
|
10
9
|
opts.banner = "Usage: whenever [options]"
|
|
11
|
-
opts.on('-i', '--update-crontab [
|
|
10
|
+
opts.on('-i', '--update-crontab [schedule]',
|
|
11
|
+
'Install the schedule to crontab.',
|
|
12
|
+
' Default: full path to schedule.rb file') do |identifier|
|
|
12
13
|
options[:update] = true
|
|
13
14
|
options[:identifier] = identifier if identifier
|
|
14
15
|
end
|
|
15
|
-
opts.on('-w', '--write-crontab [
|
|
16
|
+
opts.on('-w', '--write-crontab [schedule]',
|
|
17
|
+
'Clear current crontab, and overwrite it with only the given schedule.',
|
|
18
|
+
' Default: full path to schedule.rb file') do |identifier|
|
|
16
19
|
options[:write] = true
|
|
17
20
|
options[:identifier] = identifier if identifier
|
|
18
21
|
end
|
|
19
|
-
opts.on('-c', '--clear-crontab [
|
|
22
|
+
opts.on('-c', '--clear-crontab [schedule]',
|
|
23
|
+
'Uninstall the schedule from crontab.',
|
|
24
|
+
' Default: full path to schedule.rb file') do |identifier|
|
|
20
25
|
options[:clear] = true
|
|
21
26
|
options[:identifier] = identifier if identifier
|
|
22
27
|
end
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
# This file was generated by Appraisal
|
|
2
2
|
|
|
3
|
-
source "
|
|
3
|
+
source "https://rubygems.org"
|
|
4
4
|
|
|
5
|
-
gem "
|
|
5
|
+
gem "rake"
|
|
6
|
+
gem "mocha"
|
|
7
|
+
gem "minitest"
|
|
8
|
+
gem "appraisal"
|
|
9
|
+
gem "activesupport", "~> 5.2.0"
|
|
6
10
|
|
|
7
11
|
gemspec path: "../"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# This file was generated by Appraisal
|
|
2
|
+
|
|
3
|
+
source "https://rubygems.org"
|
|
4
|
+
|
|
5
|
+
gem "rake"
|
|
6
|
+
gem "mocha"
|
|
7
|
+
gem "minitest"
|
|
8
|
+
gem "appraisal"
|
|
9
|
+
gem "activesupport", "~> 6.0.0"
|
|
10
|
+
gem "base64"
|
|
11
|
+
gem "bigdecimal"
|
|
12
|
+
gem "mutex_m"
|
|
13
|
+
gem "benchmark"
|
|
14
|
+
gem "logger"
|
|
15
|
+
gem "concurrent-ruby", "1.3.4"
|
|
16
|
+
|
|
17
|
+
gemspec path: "../"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# This file was generated by Appraisal
|
|
2
|
+
|
|
3
|
+
source "https://rubygems.org"
|
|
4
|
+
|
|
5
|
+
gem "rake"
|
|
6
|
+
gem "mocha"
|
|
7
|
+
gem "minitest"
|
|
8
|
+
gem "appraisal"
|
|
9
|
+
gem "activesupport", "~> 6.1.0"
|
|
10
|
+
gem "base64"
|
|
11
|
+
gem "bigdecimal"
|
|
12
|
+
gem "mutex_m"
|
|
13
|
+
gem "benchmark"
|
|
14
|
+
gem "logger"
|
|
15
|
+
gem "concurrent-ruby", "1.3.4"
|
|
16
|
+
|
|
17
|
+
gemspec path: "../"
|
|
@@ -2,7 +2,7 @@ namespace :whenever do
|
|
|
2
2
|
def setup_whenever_task(*args, &block)
|
|
3
3
|
args = Array(fetch(:whenever_command)) + args
|
|
4
4
|
|
|
5
|
-
on roles fetch(:whenever_roles) do |host|
|
|
5
|
+
on roles *fetch(:whenever_roles) do |host|
|
|
6
6
|
args_for_host = block_given? ? args + Array(yield(host)) : args
|
|
7
7
|
within fetch(:whenever_path) do
|
|
8
8
|
with fetch(:whenever_command_environment_variables) do
|
|
@@ -13,20 +13,21 @@ module Whenever
|
|
|
13
13
|
@options[:file] ||= 'config/schedule.rb'
|
|
14
14
|
@options[:cut] ||= 0
|
|
15
15
|
@options[:identifier] ||= default_identifier
|
|
16
|
+
@options[:console] = true if @options[:console].nil?
|
|
16
17
|
|
|
17
18
|
if !File.exist?(@options[:file]) && @options[:clear].nil?
|
|
18
19
|
warn("[fail] Can't find file: #{@options[:file]}")
|
|
19
|
-
|
|
20
|
+
return_or_exit(false)
|
|
20
21
|
end
|
|
21
22
|
|
|
22
23
|
if [@options[:update], @options[:write], @options[:clear]].compact.length > 1
|
|
23
24
|
warn("[fail] Can only update, write or clear. Choose one.")
|
|
24
|
-
|
|
25
|
+
return_or_exit(false)
|
|
25
26
|
end
|
|
26
27
|
|
|
27
28
|
unless @options[:cut].to_s =~ /[0-9]*/
|
|
28
29
|
warn("[fail] Can't cut negative lines from the crontab #{options[:cut]}")
|
|
29
|
-
|
|
30
|
+
return_or_exit(false)
|
|
30
31
|
end
|
|
31
32
|
@options[:cut] = @options[:cut].to_i
|
|
32
33
|
|
|
@@ -42,7 +43,7 @@ module Whenever
|
|
|
42
43
|
puts Whenever.cron(@options)
|
|
43
44
|
puts "## [message] Above is your schedule file converted to cron syntax; your crontab file was not updated."
|
|
44
45
|
puts "## [message] Run `whenever --help' for more options."
|
|
45
|
-
|
|
46
|
+
return_or_exit(true)
|
|
46
47
|
end
|
|
47
48
|
end
|
|
48
49
|
|
|
@@ -77,6 +78,8 @@ module Whenever
|
|
|
77
78
|
IO.popen(command.join(' '), 'r+') do |crontab|
|
|
78
79
|
crontab.write(contents)
|
|
79
80
|
crontab.close_write
|
|
81
|
+
stdout = crontab.read
|
|
82
|
+
puts stdout unless stdout == ''
|
|
80
83
|
end
|
|
81
84
|
|
|
82
85
|
success = $?.exitstatus.zero?
|
|
@@ -85,10 +88,10 @@ module Whenever
|
|
|
85
88
|
action = 'written' if @options[:write]
|
|
86
89
|
action = 'updated' if @options[:update]
|
|
87
90
|
puts "[write] crontab file #{action}"
|
|
88
|
-
|
|
91
|
+
return_or_exit(true)
|
|
89
92
|
else
|
|
90
93
|
warn "[fail] Couldn't write crontab; try running `whenever' with no options to ensure your schedule file is valid."
|
|
91
|
-
|
|
94
|
+
return_or_exit(false)
|
|
92
95
|
end
|
|
93
96
|
end
|
|
94
97
|
|
|
@@ -96,10 +99,10 @@ module Whenever
|
|
|
96
99
|
# Check for unopened or unclosed identifier blocks
|
|
97
100
|
if read_crontab =~ Regexp.new("^#{comment_open_regex}\s*$") && (read_crontab =~ Regexp.new("^#{comment_close_regex}\s*$")).nil?
|
|
98
101
|
warn "[fail] Unclosed indentifier; Your crontab file contains '#{comment_open(false)}', but no '#{comment_close(false)}'"
|
|
99
|
-
|
|
102
|
+
return_or_exit(false)
|
|
100
103
|
elsif (read_crontab =~ Regexp.new("^#{comment_open_regex}\s*$")).nil? && read_crontab =~ Regexp.new("^#{comment_close_regex}\s*$")
|
|
101
104
|
warn "[fail] Unopened indentifier; Your crontab file contains '#{comment_close(false)}', but no '#{comment_open(false)}'"
|
|
102
|
-
|
|
105
|
+
return_or_exit(false)
|
|
103
106
|
end
|
|
104
107
|
|
|
105
108
|
# If an existing identifier block is found, replace it with the new cron entries
|
|
@@ -151,5 +154,18 @@ module Whenever
|
|
|
151
154
|
def timestamp_regex
|
|
152
155
|
" at: \\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} ([+-]\\d{4}|UTC)"
|
|
153
156
|
end
|
|
157
|
+
|
|
158
|
+
private
|
|
159
|
+
|
|
160
|
+
def return_or_exit success
|
|
161
|
+
result = 1
|
|
162
|
+
result = 0 if success
|
|
163
|
+
if @options[:console]
|
|
164
|
+
exit(result)
|
|
165
|
+
else
|
|
166
|
+
result
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
154
170
|
end
|
|
155
171
|
end
|
data/lib/whenever/job.rb
CHANGED
|
@@ -2,7 +2,7 @@ require 'shellwords'
|
|
|
2
2
|
|
|
3
3
|
module Whenever
|
|
4
4
|
class Job
|
|
5
|
-
attr_reader :at, :roles, :mailto
|
|
5
|
+
attr_reader :at, :roles, :mailto, :description
|
|
6
6
|
|
|
7
7
|
def initialize(options = {})
|
|
8
8
|
@options = options
|
|
@@ -11,6 +11,7 @@ module Whenever
|
|
|
11
11
|
@mailto = options.fetch(:mailto, :default_mailto)
|
|
12
12
|
@job_template = options.delete(:job_template) || ":job"
|
|
13
13
|
@roles = Array(options.delete(:roles))
|
|
14
|
+
@description = options.delete(:description)
|
|
14
15
|
@options[:output] = options.has_key?(:output) ? Whenever::Output::Redirection.new(options[:output]).to_s : ''
|
|
15
16
|
@options[:environment_variable] ||= "RAILS_ENV"
|
|
16
17
|
@options[:environment] ||= :production
|
data/lib/whenever/job_list.rb
CHANGED
|
@@ -37,7 +37,7 @@ module Whenever
|
|
|
37
37
|
@set_variables.has_key?(name) ? @set_variables[name] : super
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
def
|
|
40
|
+
def respond_to?(name, include_private = false)
|
|
41
41
|
@set_variables.has_key?(name) || super
|
|
42
42
|
end
|
|
43
43
|
|
|
@@ -66,7 +66,7 @@ module Whenever
|
|
|
66
66
|
|
|
67
67
|
@jobs[options.fetch(:mailto)] ||= {}
|
|
68
68
|
@jobs[options.fetch(:mailto)][@current_time_scope] ||= []
|
|
69
|
-
@jobs[options.fetch(:mailto)][@current_time_scope] << Whenever::Job.new(@
|
|
69
|
+
@jobs[options.fetch(:mailto)][@current_time_scope] << Whenever::Job.new(@set_variables.merge(@options).merge(options))
|
|
70
70
|
end
|
|
71
71
|
end
|
|
72
72
|
end
|
|
@@ -144,6 +144,7 @@ module Whenever
|
|
|
144
144
|
end
|
|
145
145
|
Whenever::Output::Cron.output(time, job, :chronic_options => @chronic_options) do |cron|
|
|
146
146
|
cron << "\n\n"
|
|
147
|
+
cron = (job.description.strip + "\n").gsub(/^(.*)$/, '# \1') + cron unless job.description.to_s.empty?
|
|
147
148
|
|
|
148
149
|
if cron[0,1] == "@"
|
|
149
150
|
shortcut_jobs << cron
|
data/lib/whenever/setup.rb
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# Environment variable defaults to RAILS_ENV
|
|
2
2
|
set :environment_variable, "RAILS_ENV"
|
|
3
|
-
# Environment defaults to
|
|
4
|
-
set
|
|
3
|
+
# Environment defaults to the value of RAILS_ENV in the current environment if
|
|
4
|
+
# it's set or production otherwise
|
|
5
|
+
set :environment, ENV.fetch("RAILS_ENV", "production")
|
|
5
6
|
# Path defaults to the directory `whenever` was run from
|
|
6
7
|
set :path, Whenever.path
|
|
7
8
|
|
data/lib/whenever/version.rb
CHANGED
data/lib/whenever.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require "whenever/version"
|
|
1
2
|
require 'whenever/numeric'
|
|
2
3
|
require 'whenever/numeric_seconds'
|
|
3
4
|
require 'whenever/job_list'
|
|
@@ -31,4 +32,11 @@ module Whenever
|
|
|
31
32
|
def self.bundler?
|
|
32
33
|
File.exist?(File.join(path, 'Gemfile'))
|
|
33
34
|
end
|
|
35
|
+
|
|
36
|
+
def self.update_cron options
|
|
37
|
+
o = { 'update' => true, 'console' => false}
|
|
38
|
+
o.merge! options if options
|
|
39
|
+
Whenever::CommandLine.execute o
|
|
40
|
+
end
|
|
41
|
+
|
|
34
42
|
end
|
|
@@ -398,7 +398,7 @@ class EnvironmentOverwrittenWithoutValueTest < Whenever::TestCase
|
|
|
398
398
|
file
|
|
399
399
|
end
|
|
400
400
|
|
|
401
|
-
should "output the runner using the original
|
|
401
|
+
should "output the runner using the original environment" do
|
|
402
402
|
assert_match two_hours + %( cd /silly/path && bundle exec script/runner -e silly 'blahblah'), @output
|
|
403
403
|
end
|
|
404
404
|
end
|
|
@@ -209,6 +209,20 @@ class OutputDefaultDefinedJobsTest < Whenever::TestCase
|
|
|
209
209
|
assert_match two_hours + ' cd /some/other/path && RAILS_ENV=production bundle exec rake blahblah --silent', output
|
|
210
210
|
end
|
|
211
211
|
|
|
212
|
+
test "A rake command that uses the default environment variable when RAILS_ENV is set" do
|
|
213
|
+
ENV.expects(:fetch).with("RAILS_ENV", "production").returns("development")
|
|
214
|
+
output = Whenever.cron \
|
|
215
|
+
<<-file
|
|
216
|
+
set :job_template, nil
|
|
217
|
+
set :path, '/my/path'
|
|
218
|
+
every 2.hours do
|
|
219
|
+
rake "blahblah"
|
|
220
|
+
end
|
|
221
|
+
file
|
|
222
|
+
|
|
223
|
+
assert_match two_hours + ' cd /my/path && RAILS_ENV=development bundle exec rake blahblah --silent', output
|
|
224
|
+
end
|
|
225
|
+
|
|
212
226
|
test "A rake command that sets the environment variable" do
|
|
213
227
|
output = Whenever.cron \
|
|
214
228
|
<<-file
|
|
@@ -55,6 +55,34 @@ class OutputDefinedJobTest < Whenever::TestCase
|
|
|
55
55
|
assert_match(/^.+ .+ .+ .+ before during after local$/, output)
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
+
test "defined job with a :task and an option where the option is set globally and on the group" do
|
|
59
|
+
output = Whenever.cron \
|
|
60
|
+
<<-file
|
|
61
|
+
set :job_template, nil
|
|
62
|
+
job_type :some_job, "before :task after :option1"
|
|
63
|
+
set :option1, 'global'
|
|
64
|
+
every 2.hours, :option1 => 'group' do
|
|
65
|
+
some_job "during"
|
|
66
|
+
end
|
|
67
|
+
file
|
|
68
|
+
|
|
69
|
+
assert_match(/^.+ .+ .+ .+ before during after group$/, output)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
test "defined job with a :task and an option where the option is set globally, on the group, and locally" do
|
|
73
|
+
output = Whenever.cron \
|
|
74
|
+
<<-file
|
|
75
|
+
set :job_template, nil
|
|
76
|
+
job_type :some_job, "before :task after :option1"
|
|
77
|
+
set :option1, 'global'
|
|
78
|
+
every 2.hours, :option1 => 'group' do
|
|
79
|
+
some_job "during", :option1 => 'local'
|
|
80
|
+
end
|
|
81
|
+
file
|
|
82
|
+
|
|
83
|
+
assert_match(/^.+ .+ .+ .+ before during after local$/, output)
|
|
84
|
+
end
|
|
85
|
+
|
|
58
86
|
test "defined job with a :task and an option that is not set" do
|
|
59
87
|
output = Whenever.cron \
|
|
60
88
|
<<-file
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class OutputDescriptionTest < Whenever::TestCase
|
|
4
|
+
test "single line description" do
|
|
5
|
+
output = Whenever.cron \
|
|
6
|
+
<<-file
|
|
7
|
+
every "weekday", :description => "A description" do
|
|
8
|
+
command "blahblah"
|
|
9
|
+
end
|
|
10
|
+
file
|
|
11
|
+
|
|
12
|
+
assert_match "# A description\n0 0 * * 1-5 /bin/bash -l -c 'blahblah'\n\n", output
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
test "multi line description" do
|
|
16
|
+
output = Whenever.cron \
|
|
17
|
+
<<-file
|
|
18
|
+
every "weekday", :description => "A description\nhas mulitple lines" do
|
|
19
|
+
command "blahblah"
|
|
20
|
+
end
|
|
21
|
+
file
|
|
22
|
+
|
|
23
|
+
assert_match "# A description\n# has mulitple lines\n0 0 * * 1-5 /bin/bash -l -c 'blahblah'\n\n", output
|
|
24
|
+
end
|
|
25
|
+
end
|
data/test/test_case.rb
CHANGED
|
@@ -2,10 +2,10 @@ module Whenever
|
|
|
2
2
|
require 'minitest/autorun'
|
|
3
3
|
begin
|
|
4
4
|
# 2.0.0
|
|
5
|
-
class TestCase <
|
|
5
|
+
class TestCase < Minitest::Test; end
|
|
6
6
|
rescue NameError
|
|
7
7
|
# 1.9.3
|
|
8
|
-
class TestCase <
|
|
8
|
+
class TestCase < Minitest::Unit::TestCase; end
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
|
data/test/test_helper.rb
CHANGED
data/whenever.gemspec
CHANGED
|
@@ -1,28 +1,29 @@
|
|
|
1
|
-
#
|
|
2
|
-
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
-
require "whenever/version"
|
|
1
|
+
# frozen_string_literal: true
|
|
4
2
|
|
|
5
|
-
|
|
6
|
-
s.name = "whenever"
|
|
7
|
-
s.version = Whenever::VERSION
|
|
8
|
-
s.platform = Gem::Platform::RUBY
|
|
9
|
-
s.authors = ["Javan Makhmali"]
|
|
10
|
-
s.email = ["javan@javan.us"]
|
|
11
|
-
s.license = "MIT"
|
|
12
|
-
s.homepage = "https://github.com/javan/whenever"
|
|
13
|
-
s.summary = %q{Cron jobs in ruby.}
|
|
14
|
-
s.description = %q{Clean ruby syntax for writing and deploying cron jobs.}
|
|
15
|
-
s.files = `git ls-files`.split("\n")
|
|
16
|
-
s.test_files = `git ls-files -- test/{functional,unit}/*`.split("\n")
|
|
17
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
18
|
-
s.require_paths = ["lib"]
|
|
19
|
-
s.required_ruby_version = ">= 1.9.3"
|
|
3
|
+
require_relative "lib/whenever/version"
|
|
20
4
|
|
|
21
|
-
|
|
5
|
+
Gem::Specification.new do |spec|
|
|
6
|
+
spec.name = "whenever"
|
|
7
|
+
spec.version = Whenever::VERSION
|
|
8
|
+
spec.platform = Gem::Platform::RUBY
|
|
9
|
+
spec.authors = ["Javan Makhmali"]
|
|
10
|
+
spec.email = ["javan@javan.us"]
|
|
22
11
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
12
|
+
spec.summary = %q{Cron jobs in ruby.}
|
|
13
|
+
spec.description = %q{Clean ruby syntax for writing and deploying cron jobs.}
|
|
14
|
+
spec.homepage = "https://github.com/javan/whenever"
|
|
15
|
+
spec.license = "MIT"
|
|
16
|
+
spec.required_ruby_version = ">= 1.9.3"
|
|
17
|
+
|
|
18
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
|
19
|
+
spec.metadata["source_code_uri"] = "https://github.com/javan/whenever"
|
|
20
|
+
spec.metadata["changelog_uri"] = "https://github.com/javan/whenever/blob/main/CHANGELOG.md"
|
|
21
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
|
22
|
+
|
|
23
|
+
spec.files = `git ls-files`.split("\n")
|
|
24
|
+
spec.test_files = `git ls-files -- test/{functional,unit}/*`.split("\n")
|
|
25
|
+
spec.executables = spec.files.grep(%r{\Abin/}) { |f| File.basename(f) }
|
|
26
|
+
spec.require_paths = ["lib"]
|
|
27
|
+
|
|
28
|
+
spec.add_dependency "chronic", ">= 0.6.3"
|
|
28
29
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: whenever
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Javan Makhmali
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: chronic
|
|
@@ -24,76 +23,6 @@ dependencies:
|
|
|
24
23
|
- - ">="
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
25
|
version: 0.6.3
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: bundler
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - ">="
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0'
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - ">="
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '0'
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: rake
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - ">="
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0'
|
|
48
|
-
type: :development
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - ">="
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: mocha
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - ">="
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: 0.9.5
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - ">="
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: 0.9.5
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: minitest
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - ">="
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '0'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - ">="
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '0'
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: appraisal
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - ">="
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: '0'
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - ">="
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: '0'
|
|
97
26
|
description: Clean ruby syntax for writing and deploying cron jobs.
|
|
98
27
|
email:
|
|
99
28
|
- javan@javan.us
|
|
@@ -103,21 +32,29 @@ executables:
|
|
|
103
32
|
extensions: []
|
|
104
33
|
extra_rdoc_files: []
|
|
105
34
|
files:
|
|
35
|
+
- ".github/dependabot.yml"
|
|
36
|
+
- ".github/workflows/ci.yml"
|
|
106
37
|
- ".gitignore"
|
|
107
|
-
- ".travis.yml"
|
|
108
38
|
- Appraisals
|
|
109
39
|
- CHANGELOG.md
|
|
40
|
+
- CONTRIBUTING.md
|
|
110
41
|
- Gemfile
|
|
111
42
|
- LICENSE
|
|
43
|
+
- Makefile
|
|
112
44
|
- README.md
|
|
113
45
|
- Rakefile
|
|
114
46
|
- bin/whenever
|
|
115
47
|
- bin/wheneverize
|
|
116
|
-
- gemfiles/activesupport4.1.gemfile
|
|
117
|
-
- gemfiles/activesupport4.2.gemfile
|
|
118
48
|
- gemfiles/activesupport5.0.gemfile
|
|
119
49
|
- gemfiles/activesupport5.1.gemfile
|
|
120
50
|
- gemfiles/activesupport5.2.gemfile
|
|
51
|
+
- gemfiles/activesupport6.0.gemfile
|
|
52
|
+
- gemfiles/activesupport6.1.gemfile
|
|
53
|
+
- gemfiles/activesupport7.0.gemfile
|
|
54
|
+
- gemfiles/activesupport7.1.gemfile
|
|
55
|
+
- gemfiles/activesupport7.2.gemfile
|
|
56
|
+
- gemfiles/activesupport8.0.gemfile
|
|
57
|
+
- gemfiles/activesupport8.1.gemfile
|
|
121
58
|
- lib/whenever.rb
|
|
122
59
|
- lib/whenever/capistrano.rb
|
|
123
60
|
- lib/whenever/capistrano/v2/hooks.rb
|
|
@@ -138,6 +75,7 @@ files:
|
|
|
138
75
|
- test/functional/output_at_test.rb
|
|
139
76
|
- test/functional/output_default_defined_jobs_test.rb
|
|
140
77
|
- test/functional/output_defined_job_test.rb
|
|
78
|
+
- test/functional/output_description_test.rb
|
|
141
79
|
- test/functional/output_env_test.rb
|
|
142
80
|
- test/functional/output_jobs_for_roles_test.rb
|
|
143
81
|
- test/functional/output_jobs_with_mailto_test.rb
|
|
@@ -152,8 +90,11 @@ files:
|
|
|
152
90
|
homepage: https://github.com/javan/whenever
|
|
153
91
|
licenses:
|
|
154
92
|
- MIT
|
|
155
|
-
metadata:
|
|
156
|
-
|
|
93
|
+
metadata:
|
|
94
|
+
homepage_uri: https://github.com/javan/whenever
|
|
95
|
+
source_code_uri: https://github.com/javan/whenever
|
|
96
|
+
changelog_uri: https://github.com/javan/whenever/blob/main/CHANGELOG.md
|
|
97
|
+
rubygems_mfa_required: 'true'
|
|
157
98
|
rdoc_options: []
|
|
158
99
|
require_paths:
|
|
159
100
|
- lib
|
|
@@ -168,9 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
168
109
|
- !ruby/object:Gem::Version
|
|
169
110
|
version: '0'
|
|
170
111
|
requirements: []
|
|
171
|
-
|
|
172
|
-
rubygems_version: 2.7.3
|
|
173
|
-
signing_key:
|
|
112
|
+
rubygems_version: 4.0.3
|
|
174
113
|
specification_version: 4
|
|
175
114
|
summary: Cron jobs in ruby.
|
|
176
115
|
test_files:
|
|
@@ -178,6 +117,7 @@ test_files:
|
|
|
178
117
|
- test/functional/output_at_test.rb
|
|
179
118
|
- test/functional/output_default_defined_jobs_test.rb
|
|
180
119
|
- test/functional/output_defined_job_test.rb
|
|
120
|
+
- test/functional/output_description_test.rb
|
|
181
121
|
- test/functional/output_env_test.rb
|
|
182
122
|
- test/functional/output_jobs_for_roles_test.rb
|
|
183
123
|
- test/functional/output_jobs_with_mailto_test.rb
|
data/.travis.yml
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
language: ruby
|
|
2
|
-
|
|
3
|
-
before_install:
|
|
4
|
-
- gem install bundler
|
|
5
|
-
- unset _JAVA_OPTIONS
|
|
6
|
-
rvm:
|
|
7
|
-
- 2.4.6
|
|
8
|
-
- 2.5.5
|
|
9
|
-
- 2.6.3
|
|
10
|
-
- jruby-9.2.6.0
|
|
11
|
-
|
|
12
|
-
gemfile:
|
|
13
|
-
- gemfiles/activesupport4.1.gemfile
|
|
14
|
-
- gemfiles/activesupport4.2.gemfile
|
|
15
|
-
- gemfiles/activesupport5.0.gemfile
|
|
16
|
-
- gemfiles/activesupport5.1.gemfile
|
|
17
|
-
- gemfiles/activesupport5.2.gemfile
|
|
18
|
-
|
|
19
|
-
env:
|
|
20
|
-
global:
|
|
21
|
-
- JRUBY_OPTS=--debug
|