Skip to content

Instantly share code, notes, and snippets.

@Yudai-Imai
Last active November 21, 2022 02:12
Show Gist options
  • Save Yudai-Imai/642bd62fe1334d9472dfc923d0899098 to your computer and use it in GitHub Desktop.
Save Yudai-Imai/642bd62fe1334d9472dfc923d0899098 to your computer and use it in GitHub Desktop.
【GAS】FormのレスポンスをGitLabにCommitしてMergeRequestを発行する
function main(e) {
var prop = PropertiesService.getScriptProperties();
var GITLAB_ACCESS_TOKEN = prop.getProperty("GITLAB_ACCESS_TOKEN");
var GITLAB_PROJECT_ID = prop.getProperty("GITLAB_PROJECT_ID");
var BILLING_ACCOUNT_ID_NIC_TRAINING = prop.getProperty("BILLING_ACCOUNT_ID_NIC_TRAINING");
const itemResponses = e.response.getItemResponses();
if (itemResponses[3].getResponse() === "PJ(案件)での検証利用"){
var folder = "anken";
console.log(folder);
}else if (itemResponses[3].getResponse() === "個人での検証利用"){
var folder = "kensho";
console.log(folder);
}else if (itemResponses[3].getResponse() === "施策での利用"){
var folder = "shisaku";
console.log(folder);
}else if (itemResponses[3].getResponse() === "学習クラウドでの利用"){
var folder = "gakushu";
console.log(folder);
};
var pj_name = itemResponses[5].getResponse();
console.log(pj_name);
if (itemResponses[6].getResponse() !== ""){
var pj_id = itemResponses[6].getResponse();
console.log(pj_id);
}else{
console.log('pj_id undefined');
var pj_id = itemResponses[5].getResponse();
console.log(pj_id);
};
var owner_account_str = itemResponses[8].getResponse();
if(owner_account_str.match(/,/) || owner_account_str.match(/、/)){
var owner_account_str = owner_account_str.replace(/ | /g, '');
var owner_account_list = owner_account_str.split(/,|、/);
owner_account_list.push("default_user");
console.log(owner_account_list);
}else{
var owner_account_list = [owner_account_str,"default_user"];
console.log(owner_account_list);
};
if (itemResponses.length == 10 || itemResponses[10].getResponse() !== "default_account"){
console.log('billing_account not default_account or undefined');
var billing_account = "";
console.log(billing_account);
}else if(itemResponses[10].getResponse() === "default_account"){
var billing_account = BILLING_ACCOUNT_ID_NIC_TRAINING;
console.log(billing_account);
};
var headers = {
'Authorization':'Bearer ' + GITLAB_ACCESS_TOKEN,
'contentType': 'application/json'
};
var commitURL = 'https://gitlab.com/api/v4/projects/' + GITLAB_PROJECT_ID + '/repository/files/environments%2Ftemplate%2Fterraform%2Etfvars';
var commitData = {
'id': GITLAB_PROJECT_ID,
'branch': pj_name,
'start_branch': 'main',
'commit_message': 'update terraform.tfvars',
'content': 'project_name = "' + pj_name + '"\nproject_id = "' + pj_id + '"\nfolder_name = "' + folder + '"\nbilling_account = "' + billing_account + '"\nowner_account = ["' + owner_account_list.join('","') + '"]'
};
var commitOptions = {
'method' : 'PUT',
'headers': headers,
// "muteHttpExceptions" : true,
'payload' : commitData
};
var mrURL = 'https://gitlab.com/api/v4/projects/' + GITLAB_PROJECT_ID + '/merge_requests';
var mrData = {
'id': GITLAB_PROJECT_ID,
'source_branch': pj_name,
'target_branch': 'main',
'title': pj_name + 'create MR',
};
var mrOptions = {
'method' : 'POST',
'headers': headers,
// "muteHttpExceptions" : true,
'payload' : mrData
};
try {
var commitResponse = UrlFetchApp.fetch(commitURL, commitOptions);
console.log(JSON.parse(commitResponse));
var mrResponse = UrlFetchApp.fetch(mrURL, mrOptions);
console.log(JSON.parse(mrResponse));
} catch(e) {
// 例外エラー処理
console.log('Error:');
console.log(e);
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment