classEnvirobly::Cli::Main<Envirobly::BaseincludeEnvirobly::Colorizedesc"version","Show Envirobly CLI version"method_option:pure,type: :boolean,default: falsedefversionifoptions.pureputsEnvirobly::VERSIONelseputs"envirobly CLI v#{Envirobly::VERSION}"endenddesc"signin","Set access token generated at Envirobly"defsigninaccess_token=Envirobly::AccessToken.new(shell:)access_token.setenddesc"signout","Sign out"defsignoutEnvirobly::AccessToken.destroysay"You've signed out."say"This didn't delete the access token itself."say"You can sign in again with `envirobly signin`."enddesc"set_default_account","Choose default account to deploy the current project to"defset_default_accountEnvirobly::Defaults::Account.new(shell:).require_idenddesc"set_default_region","Set default region for the current project when deploying for the first time"defset_default_regionEnvirobly::Defaults::Region.new(shell:).require_idenddesc"validate","Validates config"defvalidateEnvirobly::AccessToken.new(shell:).require!configs=Envirobly::Config.newapi=Envirobly::Api.newparams={validation: configs.to_params}response=api.validate_shapeparamsifresponse.object.fetch("valid")puts"Config is valid #{green_check}"elsedisplay_config_errorsresponse.object.fetch("errors")exit1endenddesc"instance_types [region]","List instance types in a given region, including price and performance characteristics."definstance_types(region=nil)default_region=Envirobly::Defaults::Region.new(shell:)region=region.presence||default_region.require_if_noneapi=Envirobly::Api.newtable_data=api.list_instance_types(region).object.mapdo|item|[item["code"],item["vcpu"],Envirobly::Numeric.new(item["memory"],short: true),Envirobly::Numeric.new(item["monthly_price"]),item["group"]]endprint_table[["Name","vCPU","Memory (GB)","Monthly price ($)","Group"]]+table_data,borders: trueenddesc"deploy [ENVIRON_NAME]",<<~TXT
Deploy to environ identified by name.
Name can contain letters, numbers, dashes or underscores.
If environ name is left blank, current git branch name is used.
TXTmethod_option:account_id,type: :numericmethod_option:region,type: :stringmethod_option:project,type: :stringmethod_option:commit,type: :string,default: "HEAD"method_option:dry_run,type: :boolean,default: falsedefdeploy(environ_name=nil)commit=Envirobly::Git::Commit.newoptions.commitunlesscommit.exists?say_error"Commit '#{commit.ref}' doesn't exist in this repository. Aborting."exit1endEnvirobly::AccessToken.new(shell:).require!environ_name=environ_name.presence||commit.current_branchproject_name=nilproject_id=nilifoptions.project.present?ifoptions.project=~Envirobly::Defaults::Project.regexpproject_id=$1.to_ielseproject_name=options.projectendenddeployment=Envirobly::Deployment.new(account_id: options.account_id,region: options.region,project_name:,environ_name:,project_id:,commit:,shell:
)deployment.perform(dry_run: options.dry_run)enddesc"pull","Download build context"defpull(region,bucket,ref,path)Envirobly::Duration.measure("Build context download took %s")dos3=Envirobly::Aws::S3.new(region:,bucket:)s3.pullref,pathendendend