lib/renuo/cli.rb in renuo-cli-4.5.0 vs lib/renuo/cli.rb in renuo-cli-4.5.1

- old
+ new

@@ -1,122 +1,122 @@ # frozen_string_literal: true -require 'renuo/cli/version' -require 'rubygems' -require 'gems' -require 'colorize' -require 'tmpdir' -require 'net/http' -require 'renuo/cli/app/services/renuo_cli_config' -require 'renuo/cli/app/name_display' -require 'renuo/cli/app/local_storage' -require 'renuo/cli/app/list_large_git_files' -require 'renuo/cli/app/generate_password' -require 'renuo/cli/app/upgrade_laptop' -require 'renuo/cli/app/create_aws_project' -require 'renuo/cli/app/create_heroku_app' -require 'renuo/cli/app/configure_sentry' -require 'renuo/cli/app/create_new_logins' -require 'renuo/cli/app/work' -require 'renuo/cli/app/release_project' -require 'renuo/cli/app/fetch_emails' -require 'renuo/cli/app/heroku_users' -require 'renuo/cli/app/setup_uptimerobot' -require 'renuo/cli/app/release_xing' -require 'renuo/cli/app/configure_semaphore' -require 'renuo/cli/app/toggl_redmine_comparator' -require 'renuo/cli/app/renuo_version' -require 'renuo/cli/app/create_slidev_presentation' -require 'renuo/cli/app/commit_leaderboard' -require 'renuo/cli/app/commit_leaderboard_sync' -require 'renuo/cli/app/secrets_fetcher' -require 'highline' +require "renuo/cli/version" +require "rubygems" +require "gems" +require "colorize" +require "tmpdir" +require "net/http" +require "renuo/cli/app/services/renuo_cli_config" +require "renuo/cli/app/name_display" +require "renuo/cli/app/local_storage" +require "renuo/cli/app/list_large_git_files" +require "renuo/cli/app/generate_password" +require "renuo/cli/app/upgrade_laptop" +require "renuo/cli/app/create_aws_project" +require "renuo/cli/app/create_heroku_app" +require "renuo/cli/app/configure_sentry" +require "renuo/cli/app/create_new_logins" +require "renuo/cli/app/work" +require "renuo/cli/app/release_project" +require "renuo/cli/app/fetch_emails" +require "renuo/cli/app/heroku_users" +require "renuo/cli/app/setup_uptimerobot" +require "renuo/cli/app/release_xing" +require "renuo/cli/app/configure_semaphore" +require "renuo/cli/app/toggl_redmine_comparator" +require "renuo/cli/app/renuo_version" +require "renuo/cli/app/create_slidev_presentation" +require "renuo/cli/app/commit_leaderboard_stage" +require "renuo/cli/app/commit_leaderboard_sync" +require "renuo/cli/app/secrets_fetcher" +require "highline" def agree(question) - question += ' [y/n]' if question + question += " [y/n]" if question super end # rubocop:disable Metrics/AbcSize, Metrics/ClassLength, Metrics/MethodLength module Renuo class CLI def start - require 'commander/import' + require "commander/import" program :version, Renuo::Cli::VERSION - program :description, 'Renuo CLI' + program :description, "Renuo CLI" info = Gems.info Renuo::Cli::NAME - if Gem::Version.new(Renuo::Cli::VERSION) < Gem::Version.new(info['version']) - say "You are running the version #{Renuo::Cli::VERSION} but the brand new #{info['version']} is available. 🎉" + if Gem::Version.new(Renuo::Cli::VERSION) < Gem::Version.new(info["version"]) + say "You are running the version #{Renuo::Cli::VERSION} but the brand new #{info["version"]} is available. 🎉" if agree("Why don't you update with `gem update renuo-cli`? I can run it for you. 💪") system("gem update #{Renuo::Cli::NAME}") - abort 'Nice! I updated myself. 🤩 Now you can run the command again.' + abort "Nice! I updated myself. 🤩 Now you can run the command again." end - abort('Good. Just do it yourself then...😒') + abort("Good. Just do it yourself then...😒") end - command :'display-name' do |c| - c.syntax = 'renuo display-name [options]' - c.summary = 'Sets the name of a customer on the Renuo dashboard' - c.description = 'Sets the name of a customer on the Renuo dashboard' + command :"display-name" do |c| + c.syntax = "renuo display-name [options]" + c.summary = "Sets the name of a customer on the Renuo dashboard" + c.description = "Sets the name of a customer on the Renuo dashboard" c.example 'Display "Peter Muster" on the dashboard', 'renuo display-name "Peter Muster"' - c.example 'Remove the current name from the dashboard', 'renuo display-name --delete' - c.example 'Override the current message on the dashboard', 'renuo display-name Happy friday 🍻 --override' - c.option '--delete', 'Deletes the current name' - c.option '--override', 'Overrides the entire message' - c.option '--monitor', 'Open the Google slides' + c.example "Remove the current name from the dashboard", "renuo display-name --delete" + c.example "Override the current message on the dashboard", "renuo display-name Happy friday 🍻 --override" + c.option "--delete", "Deletes the current name" + c.option "--override", "Overrides the entire message" + c.option "--monitor", "Open the Google slides" c.action do |args, options| NameDisplay.new.run(args, options) end end - command 'list-large-git-files' do |c| - c.syntax = 'renuo list-large-git-files' - c.summary = 'Lists the 5 largest files in a git repository. Warning: must be a bare checkout of the repo!' + command "list-large-git-files" do |c| + c.syntax = "renuo list-large-git-files" + c.summary = "Lists the 5 largest files in a git repository. Warning: must be a bare checkout of the repo!" c.description = "Lists the 5 largest files in a git repository.\nWarning: must be a bare checkout of the repo!" - c.example 'list the 5 largest git files of github.com/renuo/renuo-cli', - 'git clone --bare git@github.com:renuo/renuo-cli.git && ' \ - 'cd renuo-cli.git && renuo list-large-git-files' + c.example "list the 5 largest git files of github.com/renuo/renuo-cli", + "git clone --bare git@github.com:renuo/renuo-cli.git && " \ + "cd renuo-cli.git && renuo list-large-git-files" c.action do ListLargeGitFiles.new.run end end - command 'generate-password' do |c| - c.syntax = 'renuo generate-password' - c.summary = 'Generates a phrase of random 0-9a-zA-Z characters. Choose a substring of it as a new password.' - c.description = 'Generates a phrase of random 0-9a-zA-Z characters. Choose a substring of it as a new password.' - c.example 'renuo generate-password', 'generates a random password' + command "generate-password" do |c| + c.syntax = "renuo generate-password" + c.summary = "Generates a phrase of random 0-9a-zA-Z characters. Choose a substring of it as a new password." + c.description = "Generates a phrase of random 0-9a-zA-Z characters. Choose a substring of it as a new password." + c.example "renuo generate-password", "generates a random password" c.action do GeneratePassword.new.run end end - command 'upgrade-laptop' do |c| - c.syntax = 'renuo upgrade-laptop' - c.summary = 'Upgrades the installed apps from the app store, macOS and homebrew' - c.description = 'Upgrades the installed apps from the app store, macOS and homebrew' - c.example 'renuo upgrade-laptop', 'upgrades your laptop' + command "upgrade-laptop" do |c| + c.syntax = "renuo upgrade-laptop" + c.summary = "Upgrades the installed apps from the app store, macOS and homebrew" + c.description = "Upgrades the installed apps from the app store, macOS and homebrew" + c.example "renuo upgrade-laptop", "upgrades your laptop" c.action do UpgradeLaptop.new.run end end - command 'create-new-logins' do |c| - c.syntax = 'renuo create-new-logins' - c.summary = 'Guides you through the sign up pages for Sentry, NewRelic and Gemnasium' - c.description = 'Guides you through the sign up pages for Sentry, NewRelic and Gemnasium' - c.example 'renuo create-new-logins', 'creates new logins' + command "create-new-logins" do |c| + c.syntax = "renuo create-new-logins" + c.summary = "Guides you through the sign up pages for Sentry, NewRelic and Gemnasium" + c.description = "Guides you through the sign up pages for Sentry, NewRelic and Gemnasium" + c.example "renuo create-new-logins", "creates new logins" c.action do CreateNewLogins.new.run end end - command 'create-aws-project' do |c| - c.syntax = 'renuo create-aws-project' - c.summary = 'Generates necessary commands for our project setup on AWS incl. necessary installations.' + command "create-aws-project" do |c| + c.syntax = "renuo create-aws-project" + c.summary = "Generates necessary commands for our project setup on AWS incl. necessary installations." c.description = <<~DESCRIPTION This creates commands for creating AWS users, buckets an versioning policies and CloudFront. It also guides you to set up the necessary environment. You will be asked for: @@ -131,169 +131,171 @@ - create S3 buckets for each user who owns it - tag the buckets - enable versioning for main buckets (- set up a CloudFront distribution for each environment with the default config or plus alias if configured) DESCRIPTION - c.example 'Setup a project (you will be asked for details)', 'renuo create-aws-project' + c.example "Setup a project (you will be asked for details)", "renuo create-aws-project" c.action do |_args, _options| CreateAwsProject.new.run end end - command 'work' do |c| - c.syntax = 'renuo work' - c.summary = 'A utility command to start working on a ticket.' - c.description = 'When you start working on a feature, it will jump to the project folder, ' \ - 'start a new feature with the ticket number,' \ + command "work" do |c| + c.syntax = "renuo work" + c.summary = "A utility command to start working on a ticket." + c.description = "When you start working on a feature, it will jump to the project folder, " \ + "start a new feature with the ticket number," \ 'move the ticket in "In progress" state on Redmine and start Toggl with the ' \ - 'ticket number or add the ticket number to the running one if there was none.' - c.example 'renuo work start kinova 1234', 'start working on ticket 1234 on kinova project' + "ticket number or add the ticket number to the running one if there was none." + c.example "renuo work start kinova 1234", "start working on ticket 1234 on kinova project" c.action do |args| Work.new.run(args) end end - command 'release' do |c| - c.syntax = 'renuo release' - c.summary = 'Release a projects state of develop (on github) to main in one command.' - c.description = 'Creates a new release version of a project on main as either a Major, Minor, ' \ - 'Patch or Custom release based on the current state of develop on Github' - c.example 'renuo release my-project minor', 'release a minor release of my-project' - c.example 'renuo release my-project custom 2.5.0', 'release my-project as release 2.5.0' + command "release" do |c| + c.syntax = "renuo release" + c.summary = "Release a projects state of develop (on github) to main in one command." + c.description = "Creates a new release version of a project on main as either a Major, Minor, " \ + "Patch or Custom release based on the current state of develop on Github" + c.example "renuo release my-project minor", "release a minor release of my-project" + c.example "renuo release my-project custom 2.5.0", "release my-project as release 2.5.0" c.action do |args| ReleaseProject.new.run(args) end end - command 'create-heroku-app' do |c| - c.syntax = 'renuo create-heroku-app' - c.summary = 'Generates the script necessary to setup an application on Heroku.' - c.description = 'Generates the script necessary to setup an application on Heroku.' - c.example 'renuo create-heroku-app hello', 'generates the command to create hello on Heroku' + command "create-heroku-app" do |c| + c.syntax = "renuo create-heroku-app" + c.summary = "Generates the script necessary to setup an application on Heroku." + c.description = "Generates the script necessary to setup an application on Heroku." + c.example "renuo create-heroku-app hello", "generates the command to create hello on Heroku" c.action do |args| CreateHerokuApp.new.run(args) end end - command 'configure-sentry' do |c| - c.syntax = 'renuo configure-sentry [project-name] [SENTRY_DSN]' - c.summary = 'Generates the script necessary to setup sentry on Heroku.' + command "configure-sentry" do |c| + c.syntax = "renuo configure-sentry [project-name] [SENTRY_DSN]" + c.summary = "Generates the script necessary to setup sentry on Heroku." c.description = c.summary - c.example 'renuo configure-sentry myproject https://randomkey@sentry.io/11223344', - 'generates the command to configure sentry for myproject on Heroku' + c.example "renuo configure-sentry myproject https://randomkey@sentry.io/11223344", + "generates the command to configure sentry for myproject on Heroku" c.action do |args| ConfigureSentry.new.run(args) end end - command 'fetch-emails' do |c| - c.syntax = 'renuo fetch-emails' - c.summary = 'Retrieves all renuo employees email addresses' - c.description = 'Retrieves all renuo employees email addresses. One per line.' + command "fetch-emails" do |c| + c.syntax = "renuo fetch-emails" + c.summary = "Retrieves all renuo employees email addresses" + c.description = "Retrieves all renuo employees email addresses. One per line." c.action do |args| FetchEmails.new.run(args) end end - command 'heroku-users' do |c| - c.syntax = 'renuo heroku-users add/remove emailaddress' - c.summary = 'Prints a list of commands to add or remove an email address from all Heroku projects' - c.description = 'Useful when a new person is hired or a person quits.' - c.example 'renuo heroku-users add alessandro.rodi@renuo.ch', - 'Adds the user alessandro.rodi@renuo.ch to all the Heroku projects' - c.example 'renuo heroku-users remove alessandro.rodi@renuo.ch', - 'Removes the user alessandro.rodi@renuo.ch from all the Heroku projects' + command "heroku-users" do |c| + c.syntax = "renuo heroku-users add/remove emailaddress" + c.summary = "Prints a list of commands to add or remove an email address from all Heroku projects" + c.description = "Useful when a new person is hired or a person quits." + c.example "renuo heroku-users add alessandro.rodi@renuo.ch", + "Adds the user alessandro.rodi@renuo.ch to all the Heroku projects" + c.example "renuo heroku-users remove alessandro.rodi@renuo.ch", + "Removes the user alessandro.rodi@renuo.ch from all the Heroku projects" c.action do |args| HerokuUsers.new.run(args) end end - command 'setup-uptimerobot' do |c| - c.syntax = 'renuo setup-uptimerobot' - c.summary = 'Sets up uptimerobot for the given project' - c.description = 'The uptimerobot configuration is mandatory for most projects. ' \ - 'This command sets everything up and pauses the monitoring directly. Once the app is ready, ' \ - 'the monitoring should get started.' - c.example 'renuo setup-uptimerobot https://redmine.ch', 'Configures redmine monitoring on uptimerobot' + command "setup-uptimerobot" do |c| + c.syntax = "renuo setup-uptimerobot" + c.summary = "Sets up uptimerobot for the given project" + c.description = "The uptimerobot configuration is mandatory for most projects. " \ + "This command sets everything up and pauses the monitoring directly. Once the app is ready, " \ + "the monitoring should get started." + c.example "renuo setup-uptimerobot https://redmine.ch", "Configures redmine monitoring on uptimerobot" c.action do |args| SetupUptimerobot.new(args).run end end - command 'release-xing' do |c| - c.syntax = 'renuo release-xing' - c.summary = 'Release Xing to preview.' - c.description = 'Xing needs to be released manually. ' \ - 'You need a VPN connection open before runnign this command.' + command "release-xing" do |c| + c.syntax = "renuo release-xing" + c.summary = "Release Xing to preview." + c.description = "Xing needs to be released manually. " \ + "You need a VPN connection open before runnign this command." c.action do |_args| ReleaseXing.new.run end end - command 'configure-semaphore' do |c| - c.syntax = 'renuo configure-semaphore' - c.summary = 'Adds standard semaphore configuration files to a project and creates the notifications' - c.description = 'Run this command with a project, to add the semaphore configuration files ' \ - 'and create notifications.' + command "configure-semaphore" do |c| + c.syntax = "renuo configure-semaphore" + c.summary = "Adds standard semaphore configuration files to a project and creates the notifications" + c.description = "Run this command with a project, to add the semaphore configuration files " \ + "and create notifications." c.action do |_args| ConfigureSemaphore.new.call end end - command 'toggl-redmine' do |c| - c.syntax = 'renuo toggl-redmine' - c.summary = 'Compares your time entries between Toggl and Redmine' - c.description = 'This command extracts your time entries in Toggl and in Redmine and checks if they are ' \ - 'consistant. It can help you in your time booking to find if you booked something wrong' + command "toggl-redmine" do |c| + c.syntax = "renuo toggl-redmine" + c.summary = "Compares your time entries between Toggl and Redmine" + c.description = "This command extracts your time entries in Toggl and in Redmine and checks if they are " \ + "consistant. It can help you in your time booking to find if you booked something wrong" c.action do |_args| TogglRedmineComparator.call end end - command 'create-slidev-presentation' do |c| - c.syntax = 'renuo create-slidev-presentation [presentation-name]' - c.summary = 'Creates a new Slidev presentation with the Renuo theme' - c.description = 'Creates a new Slidev presentation with the Renuo theme' + command "create-slidev-presentation" do |c| + c.syntax = "renuo create-slidev-presentation [presentation-name]" + c.summary = "Creates a new Slidev presentation with the Renuo theme" + c.description = "Creates a new Slidev presentation with the Renuo theme" c.action do |args| CreateSlidevPresentation.new.run(args) end end - command 'commit-leaderboard-stage' do |c| - c.syntax = 'renuo commit-leaderboard-stage [username] [avatar-url] [queue-path]' - c.summary = 'Adds local commits to a local queue for the commit leaderboard' + command "commit-leaderboard-stage" do |c| + c.syntax = "renuo commit-leaderboard-stage [username] [avatar-url] [queue-path]" + c.summary = "Adds local commits to a local queue for the commit leaderboard" + c.option "--verbose", "Prints the latest commit" c.description = <<~DESCRIPTION Add post-commit hook to `git config core.hookspath` with the following contents: #!/usr/bin/env sh renuo commit-leaderboard-stage CuddlyBunion341 "https://avatars.githubusercontent.com/u/53896675?v=4" ~/.renuo-commit-leaderboard.json # You can get the GitHub avatar url using `gh api user | jq .avatar_url` DESCRIPTION - c.action do |args| - CommitLeaderboard.new.run(args) + c.action do |args, options| + CommitLeaderboardStage.new.run(args, options) end end - command 'commit-leaderboard-sync' do |c| - c.syntax = 'renuo commit-leaderboard-sync [api-secret] [queue-path] [api-url]' - c.summary = 'Sends commits from the queue to the commit leaderboard' + command "commit-leaderboard-sync" do |c| + c.syntax = "renuo commit-leaderboard-sync [api-secret] [queue-path] [api-url]" + c.summary = "Sends commits from the queue to the commit leaderboard" c.description = <<~DESCRIPTION Sends commits from the queue to the commit leaderboard Add pre-push hook to `git config core.hookspath` with the following contents: #/usr/bin/env sh renuo commit-leaderboard-sync {SECRET} ~/.renuo-commit-leaderboard.json https://dashboard.renuo.ch/api/v1/commit_leaderboard DESCRIPTION - c.action do |args| - CommitLeaderboardSync.new.run(args) + c.option "--verbose", "Prints the configuration, request body and response" + c.action do |args, options| + CommitLeaderboardSync.new.run(args, options) end end - command 'fetch-secrets' do |c| - c.syntax = 'renuo fetch-secrets' - c.summary = 'Fetches the needed secrets in a project from the renuo secrets store' + command "fetch-secrets" do |c| + c.syntax = "renuo fetch-secrets" + c.summary = "Fetches the needed secrets in a project from the renuo secrets store" c.description = <<~DESCRIPTION Run the command within a project folder to fetch the secrets from the renuo secrets store. The bin/setup of the project might run this command for you. DESCRIPTION c.action do