# frozen_string_literal: true require "yaml" require "json" module Groundskeeper # Accesses project details stored in the home directory. class Project attr_reader :details, :servers, :repo_name, :git DETAILS_PATH = "~/.project_details/projects.yml" SERVERS_PATH = "~/.project_details/servers.yml" JIRA_PREFIX_KEY = "jira_prefix" PROJECT_NAME_KEY = "name" FULL_DNS_KEY = "full_dns" RVM_RUBY_VERSION_KEY = "ruby_version" SENTRY_DSN_KEY = "sentry_dsn" SENTRY_PROJECT_KEY = "sentry_project" SMTP_DOMAIN = "smtp_domain" WHENEVER_KEY = "uses_whenever" def self.build(repository_name) new( projects_yaml: Document.new(DETAILS_PATH).read, servers_yaml: Document.new(SERVERS_PATH).read, repository_name: repository_name, git: Git.build ) end # :nocov: def self.available_applications yaml = Document.new(DETAILS_PATH).read projects = YAML.safe_load(yaml) || {} projects.keys.join(", ") end # :nocov: def initialize(projects_yaml:, servers_yaml:, repository_name:, git: nil) projects = YAML.safe_load(projects_yaml) || {} @details = projects[repository_name] || {} @servers = YAML.safe_load(servers_yaml) || {} @repo_name = repository_name @git = git end def project_name details[PROJECT_NAME_KEY] || "" end def jira_prefix details[JIRA_PREFIX_KEY] || "" end def full_dns(stage) details.dig(FULL_DNS_KEY, stage.to_s) || "" end # :nocov: def smtp_domain details[SMTP_DOMAIN] || "" end # :nocov: # :nocov: def rvm_ruby_version details[RVM_RUBY_VERSION_KEY] || "" end # :nocov: # :nocov: def sentry_dsn details[SENTRY_DSN_KEY] || "" end # :nocov: def sentry_project details[SENTRY_PROJECT_KEY] || "" end # :nocov: def uses_whenever? details[WHENEVER_KEY] == true end # :nocov: # :nocov: def server_config(stage) servers[full_dns(stage)] end # :nocov: # :nocov: def repo_url git.origin_url end # :nocov: # :nocov: def deploy_to "/var/www/apps/#{repo_name}" end # :nocov: # :nocov: def tags git.fetch_and_list_tags end # :nocov: end end