Skip to content

Commit

Permalink
Ran rubocop autofix against the script
Browse files Browse the repository at this point in the history
  • Loading branch information
jcpunk committed Jan 13, 2023
1 parent f7058ef commit ba4c299
Showing 1 changed file with 66 additions and 64 deletions.
130 changes: 66 additions & 64 deletions templates/server/post-receive.erb
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
#!/usr/bin/env ruby
# frozen_string_literal: true

#
# Managed by Puppet
#

require 'English'
require 'fileutils'
require 'etc'

$stdout.sync = true
$stderr.sync = true

# Set this to where you want to keep your environments
ENVIRONMENT_BASEDIR = "<%= scope.lookupvar("puppet::server::config::primary_envs_dir") %>"
ENVIRONMENT_BASEDIR = "<%= scope.lookupvar('puppet::server::config::primary_envs_dir') %>"

# post-receive hooks set GIT_DIR to the current repository. If you want to
# clone from a non-local repository, set this to the URL of the repository,
Expand All @@ -25,7 +28,7 @@ BRANCH_MAP = {
"<%= g %>" => "<%= p %>",
<% end -%>
<% end -%>
}
}.freeze
# The git_dir environment variable will override the --git-dir, so we remove it
# to allow us to create new directories cleanly.
Expand All @@ -34,110 +37,109 @@ ENV.delete('GIT_DIR')
# Ensure that we have the underlying directories, otherwise the later commands
# may fail in somewhat cryptic manners.
unless File.directory? ENVIRONMENT_BASEDIR
puts %Q{#{ENVIRONMENT_BASEDIR} does not exist, cannot create environment directories.}
puts %(#{ENVIRONMENT_BASEDIR} does not exist, cannot create environment directories.)
exit 1
end
# If we're running as root we change our UID to the owner of this file.
file_uid = File.stat($0).uid
if file_uid != Process.uid and Process.uid == 0
file_uid = File.stat($PROGRAM_NAME).uid
if (file_uid != Process.uid) && Process.uid.zero?
Process::UID.change_privilege(file_uid)
# Set LOGNAME and HOME directories to file-owning user's values
# so git can read ~/.config/git/attributes (for example) without error
file_pwuid = Etc::getpwuid(file_uid)
ENV.store('LOGNAME',file_pwuid.name)
ENV.store('HOME',file_pwuid.dir)
file_pwuid = Etc.getpwuid(file_uid)
ENV.store('LOGNAME', file_pwuid.name)
ENV.store('HOME', file_pwuid.dir)
end
# Run a command, return its output and abort if it fails
def do_cmd(cmd)
ret = %x{#{cmd}}
if $?.exitstatus != 0
puts("'#{cmd}' failed. Giving up.")
exit 1
end
ret
ret = %x{#{cmd}}
if $CHILD_STATUS.exitstatus != 0
puts("'#{cmd}' failed. Giving up.")
exit 1
end
ret
end
# You can push multiple refspecs at once, like 'git push origin branch1 branch2',
# so we need to handle each one.
$stdin.each_line do |line|
oldrev, newrev, refname = line.split(" ")
$stdin.each_line do |line| # rubocop:disable Metrics/BlockLength
_oldrev, newrev, refname = line.split(' ')
# Determine the branch name from the refspec we're received, which is in the
# format refs/heads/<branch>, and make sure that it doesn't have any possibly
# dangerous characters
branchname = refname.sub(%r{^refs/heads/(.*$)}) { $1 }
if branchname =~ /[\W]/
puts %Q{Branch "#{branchname}" contains non-word characters, ignoring it.}
branchname = refname.sub(%r{^refs/heads/(.*$)}) { Regexp.last_match(1) }
if branchname =~ /\W/
puts %(Branch "#{branchname}" contains non-word characters, ignoring it.)
next
end
if BRANCH_MAP[branchname] != nil
if !BRANCH_MAP[branchname].nil?
environment_name = BRANCH_MAP[branchname]
environment_path = "#{ENVIRONMENT_BASEDIR}/#{BRANCH_MAP[branchname]}"
else
environment_name = branchname
environment_path = "#{ENVIRONMENT_BASEDIR}/#{branchname}"
end
# Perform one of these operations:
# - delete
# - update
# - create
if newrev =~ /^0+$/
# We've received a push with a null revision, something like 000000000000,
# which means that we should delete the given branch.
puts "Deleting existing environment #{environment_name}"
if File.directory? environment_path
FileUtils.rm_rf environment_path, :secure => true
end
else
# We have been given a branch that needs to be created or updated. If the
# environment exists, update it. Else, create it.
if File.directory? environment_path
# Update an existing environment. We do a fetch and then reset in the
# case that someone did a force push to a branch.
puts "Updating existing environment #{environment_name}"
Dir.chdir environment_path
do_cmd("git fetch --all")
do_cmd("git reset --hard 'origin/#{branchname}'")
if File.exist? "#{environment_path}/.gitmodules"
# ensure that we remove deleted sub modules too
do_cmd("git status --short").split("\n").each do |file|
# ?? old_submodule/
if file =~ /\s*\?{2}\s*(\S*)/
puts "Found a few unknown files.. deleting #{$1}"
FileUtils.rm_rf $1, :secure => true
end
end
do_cmd("git submodule sync")
do_cmd("git submodule update --init --recursive")
<% if @git_repo_r10k -%>
if File.exist? 'Puppetfile'
puts("Installing modules using r10k")
do_cmd("r10k puppetfile install")
FileUtils.rm_rf environment_path, secure: true if File.directory? environment_path
elsif File.directory? environment_path
# Update an existing environment. We do a fetch and then reset in the
# case that someone did a force push to a branch.
# We have been given a branch that needs to be updated.
puts "Updating existing environment #{environment_name}"
Dir.chdir environment_path
do_cmd('git fetch --all')
do_cmd("git reset --hard 'origin/#{branchname}'")
if File.exist? "#{environment_path}/.gitmodules"
# ensure that we remove deleted sub modules too
do_cmd('git status --short').split("\n").each do |file|
# ?? old_submodule/
if file =~ /\s*\?{2}\s*(\S*)/
puts "Found a few unknown files.. deleting #{Regexp.last_match(1)}"
FileUtils.rm_rf Regexp.last_match(1), secure: true
end
<% end -%>
<% if @git_repo_gen_types -%>
puts("Generating types for #{environment_name})"
do_cmd("puppet generate types --environmentpath #{ENVIRONMENT_BASEDIR} --environment #{environment_name}")
<% end -%>
end
else
# Instantiate a new environment from the current repository.
puts "Creating new environment #{environment_name}"
do_cmd("git clone --recursive #{SOURCE_REPOSITORY} #{environment_path} --branch #{branchname}")
do_cmd('git submodule sync')
do_cmd('git submodule update --init --recursive')
<% if @git_repo_r10k -%>
Dir.chdir environment_path
if File.exist? 'Puppetfile'
puts("Installing modules using r10k")
do_cmd("r10k puppetfile install")
puts('Installing modules using r10k')
do_cmd('r10k puppetfile install')
end
<% end -%>
<% if @git_repo_gen_types -%>
puts("Generating types for #{environment_name})"
puts("Generating types for #{environment_name}")
do_cmd("puppet generate types --environmentpath #{ENVIRONMENT_BASEDIR} --environment #{environment_name}")
<% end -%>
end
else
# Instantiate a new environment from the current repository.
puts "Creating new environment #{environment_name}"
do_cmd("git clone --recursive #{SOURCE_REPOSITORY} #{environment_path} --branch #{branchname}")
Dir.chdir environment_path
<% if @git_repo_r10k -%>
if File.exist? 'Puppetfile'
puts('Installing modules using r10k')
do_cmd('r10k puppetfile install')
end
<% end -%>
<% if @git_repo_gen_types -%>
puts("Generating types for #{environment_name}")
do_cmd("puppet generate types --environmentpath #{ENVIRONMENT_BASEDIR} --environment #{environment_name}")
<% end -%>
end
end

0 comments on commit ba4c299

Please sign in to comment.