Read azure devops assets from tarball
This commit is contained in:
@@ -1,15 +1,16 @@
|
||||
#!/usr/bin/env ruby
|
||||
require "date"
|
||||
require "json"
|
||||
require "net/http"
|
||||
require "open3"
|
||||
require "optparse"
|
||||
require "pathname"
|
||||
require "date"
|
||||
require "tmpdir"
|
||||
|
||||
options = {
|
||||
code_assets_dir: "code",
|
||||
pipeline_assets_dir: "pipelines",
|
||||
assets_file: "azure_devops.tgz",
|
||||
root_dir: File.join(ENV["CODESPACE_VSCODE_FOLDER"], "azure_devops/bootstrap"),
|
||||
forecast_source_file: File.join(".", "azure_devops/bootstrap/jobs.json")
|
||||
forecast_source_file: "jobs.json"
|
||||
}
|
||||
|
||||
OptionParser.new do |opt|
|
||||
@@ -72,38 +73,42 @@ def create_repository(options)
|
||||
repository = options[:project]
|
||||
access_token = options[:access_token]
|
||||
root_dir = options[:root_dir]
|
||||
directories = [options[:code_assets_dir], options[:pipeline_assets_dir]]
|
||||
assets_file = options[:assets_file]
|
||||
|
||||
puts "Creating repository #{repository}..."
|
||||
uri = URI("https://dev.azure.com/#{organization}/#{project}/_apis/git/repositories/#{repository}/pushes?api-version=7.1-preview.2")
|
||||
|
||||
root = Pathname.new(root_dir)
|
||||
repository_to_create = {
|
||||
Dir.mktmpdir do |tmp_dir|
|
||||
puts "Extracting assets..."
|
||||
_, _, st = Open3.capture3("tar", "-xzf", File.join(root_dir, assets_file), "-C", tmp_dir)
|
||||
abort unless st.exitstatus == 0
|
||||
|
||||
uri = URI("https://dev.azure.com/#{organization}/#{project}/_apis/git/repositories/#{repository}/pushes?api-version=7.1-preview.2")
|
||||
puts "Creating repository #{repository}..."
|
||||
|
||||
root = Pathname.new(root_dir)
|
||||
repository_to_create = {
|
||||
refUpdates: [{
|
||||
name: "refs/heads/main",
|
||||
oldObjectId: "0000000000000000000000000000000000000000"
|
||||
}],
|
||||
commits: [{
|
||||
comment: "Initial commit.",
|
||||
changes: directories.map do |directory|
|
||||
Dir[File.join(root_dir, directory, "**/*")].reject {|f| File.directory?(f) }.map do |entry|
|
||||
{
|
||||
changeType: "add",
|
||||
item: {
|
||||
path: File.join("/", Pathname.new(entry).relative_path_from(root).to_s)
|
||||
},
|
||||
newContent: {
|
||||
content: File.read(entry),
|
||||
contentType: "rawText"
|
||||
}
|
||||
changes: Dir[File.join(tmp_dir, "**/*")].reject {|f| File.directory?(f) }.map do |entry|
|
||||
{
|
||||
changeType: "add",
|
||||
item: {
|
||||
path: File.join("/", Pathname.new(entry).relative_path_from(tmp_dir).to_s)
|
||||
},
|
||||
newContent: {
|
||||
content: File.read(entry),
|
||||
contentType: "rawText"
|
||||
}
|
||||
end
|
||||
}
|
||||
end.flatten
|
||||
}]
|
||||
}
|
||||
}
|
||||
|
||||
post_request(uri, repository_to_create, access_token) do |response|
|
||||
raise "Error creating repository (#{response.code}:#{response.message})" unless response.code.start_with?("20")
|
||||
post_request(uri, repository_to_create, access_token) do |response|
|
||||
raise "Error creating repository (#{response.code}:#{response.message})" unless response.code.start_with?("20")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -172,13 +177,15 @@ end
|
||||
|
||||
def update_forecast_source_file(options)
|
||||
puts "Updating forecast data"
|
||||
jobs_data = File.read(options[:forecast_source_file])
|
||||
root_dir = options[:root_dir]
|
||||
jobs_data_file = options[:forecast_source_file]
|
||||
jobs_data = File.read(File.join(root_dir, jobs_data_file))
|
||||
today = Date.today.strftime("%Y-%m-%d")
|
||||
jobs_data.gsub!(/20[0-2][0-9]-[0-1][0-9]-[0-3][0-9]/, today)
|
||||
File.write(options[:forecast_source_file], jobs_data)
|
||||
end
|
||||
|
||||
create_project(options)
|
||||
# create_project(options)
|
||||
repository = create_repository(options)
|
||||
create_yaml_pipelines(options, repository)
|
||||
create_classic_pipelines(options, repository)
|
||||
|
||||
Reference in New Issue
Block a user