From def2d5565ea101f7d9538457a1c20ef87f638c3b Mon Sep 17 00:00:00 2001
From: Lin Jen-Shin <godfat@godfat.org>
Date: Tue, 8 Jan 2019 23:36:38 +0800
Subject: [PATCH] Adopt Fugit to replace Rufus::Scheduler

---
 Gemfile.lock                                  | 6 +++---
 changelogs/unreleased/update-sidekiq-cron.yml | 6 ++++++
 doc/user/project/pipelines/schedules.md       | 2 +-
 lib/gitlab/ci/cron_parser.rb                  | 7 ++-----
 spec/sidekiq/cron/job_gem_dependency_spec.rb  | 4 ++--
 5 files changed, 14 insertions(+), 11 deletions(-)
 create mode 100644 changelogs/unreleased/update-sidekiq-cron.yml

diff --git a/Gemfile.lock b/Gemfile.lock
index 8e48c4190f52..fda6e8ff9753 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -185,7 +185,7 @@ GEM
     erubi (1.7.1)
     erubis (2.7.0)
     escape_utils (1.2.1)
-    et-orbi (1.1.6)
+    et-orbi (1.1.7)
       tzinfo
     eventmachine (1.2.7)
     excon (0.62.0)
@@ -258,8 +258,8 @@ GEM
     foreman (0.84.0)
       thor (~> 0.19.1)
     formatador (0.2.5)
-    fugit (1.1.6)
-      et-orbi (~> 1.1, >= 1.1.6)
+    fugit (1.1.7)
+      et-orbi (~> 1.1, >= 1.1.7)
       raabro (~> 1.1)
     fuubar (2.2.0)
       rspec-core (~> 3.0)
diff --git a/changelogs/unreleased/update-sidekiq-cron.yml b/changelogs/unreleased/update-sidekiq-cron.yml
new file mode 100644
index 000000000000..edce32e37535
--- /dev/null
+++ b/changelogs/unreleased/update-sidekiq-cron.yml
@@ -0,0 +1,6 @@
+---
+title: Update sidekiq-cron to 1.0.4 and use fugit to replace rufus-scheduler to parse
+  cron syntax
+merge_request: 24235
+author:
+type: other
diff --git a/doc/user/project/pipelines/schedules.md b/doc/user/project/pipelines/schedules.md
index 051277dfe02c..ec8b8444d994 100644
--- a/doc/user/project/pipelines/schedules.md
+++ b/doc/user/project/pipelines/schedules.md
@@ -3,7 +3,7 @@
 > **Notes**:
 > - This feature was introduced in 9.1 as [Trigger Schedule][ce-10533].
 > - In 9.2, the feature was [renamed to Pipeline Schedule][ce-10853].
-> - Cron notation is parsed by [Rufus-Scheduler](https://github.com/jmettraux/rufus-scheduler).
+> - Cron notation is parsed by [Fugit](https://github.com/floraison/fugit).
 
 Pipeline schedules can be used to run a pipeline at specific intervals, for example every
 month on the 22nd for a certain branch.
diff --git a/lib/gitlab/ci/cron_parser.rb b/lib/gitlab/ci/cron_parser.rb
index b1db9084662d..94f4a4e36c9c 100644
--- a/lib/gitlab/ci/cron_parser.rb
+++ b/lib/gitlab/ci/cron_parser.rb
@@ -35,7 +35,7 @@ def timezone_name(timezone)
       # NOTE:
       # cron_timezone can only accept timezones listed in TZInfo::Timezone.
       # Aliases of Timezones from ActiveSupport::TimeZone are NOT accepted,
-      # because Rufus::Scheduler only supports TZInfo::Timezone.
+      # because Fugit::Cron only supports TZInfo::Timezone.
       #
       # For example, those codes have the same effect.
       # Time.zone = 'Pacific Time (US & Canada)' (ActiveSupport::TimeZone)
@@ -47,10 +47,7 @@ def timezone_name(timezone)
       # If you want to know more, please take a look
       # https://github.com/rails/rails/blob/master/activesupport/lib/active_support/values/time_zone.rb
       def try_parse_cron(cron, cron_timezone)
-        cron_line = Rufus::Scheduler.parse("#{cron} #{cron_timezone}")
-        cron_line if cron_line.is_a?(Rufus::Scheduler::CronLine)
-      rescue
-        # noop
+        Fugit::Cron.parse("#{cron} #{cron_timezone}")
       end
     end
   end
diff --git a/spec/sidekiq/cron/job_gem_dependency_spec.rb b/spec/sidekiq/cron/job_gem_dependency_spec.rb
index 2e30cf025b00..2e7de75fd085 100644
--- a/spec/sidekiq/cron/job_gem_dependency_spec.rb
+++ b/spec/sidekiq/cron/job_gem_dependency_spec.rb
@@ -2,7 +2,7 @@
 
 describe Sidekiq::Cron::Job do
   describe 'cron jobs' do
-    context 'when rufus-scheduler depends on ZoTime or EoTime' do
+    context 'when Fugit depends on ZoTime or EoTime' do
       before do
         described_class
           .create(name: 'TestCronWorker',
@@ -10,7 +10,7 @@
                   class: Settings.cron_jobs[:pipeline_schedule_worker]['job_class'])
       end
 
-      it 'does not get "Rufus::Scheduler::ZoTime/EtOrbi::EoTime into an exact number"' do
+      it 'does not get any errors' do
         expect { described_class.all.first.should_enque?(Time.now) }.not_to raise_error
       end
     end
-- 
GitLab