251 lines
7.4 KiB
PHP
251 lines
7.4 KiB
PHP
<?php
|
|
// ini_set('display_errors', 1);
|
|
// ini_set('display_startup_errors', 1);
|
|
// error_reporting(E_ALL);
|
|
// header("Content-Type: application/json; charset=utf-8");
|
|
|
|
// require __DIR__ . '/../vendor/autoload.php'; // AWS SDK 로드
|
|
|
|
// use Aws\S3\S3Client;
|
|
// use Aws\Exception\AwsException;
|
|
|
|
// // === DB 연결 ===
|
|
// $conn = new mysqli('localhost', 'egbim', 'baron3840!!', 'egbim');
|
|
// if ($conn->connect_error) {
|
|
// http_response_code(500);
|
|
// echo json_encode(['message' => 'DB 연결 실패']);
|
|
// exit;
|
|
// }
|
|
// mysqli_set_charset($conn, 'utf8mb4');
|
|
|
|
// // === 파라미터 ===
|
|
// $file_id = $_POST['id'] ?? 0;
|
|
// $releaser = $_POST['releaser'] ?? '관리자';
|
|
|
|
// if (!$file_id) {
|
|
// http_response_code(400);
|
|
// echo json_encode(['message' => '필수값 누락']);
|
|
// exit;
|
|
// }
|
|
|
|
// // === 파일 정보 가져오기 ===
|
|
// $res = $conn->query("SELECT * FROM deploy_files WHERE id=".(int)$file_id);
|
|
// $file = $res->fetch_assoc();
|
|
|
|
// if (!$file) {
|
|
// http_response_code(404);
|
|
// echo json_encode(['message' => '파일 정보 없음']);
|
|
// exit;
|
|
// }
|
|
|
|
// $sourceBucket = 'baron-software-test';
|
|
// $targetBucket = 'baron-software-release';
|
|
// $objectKey = $file['filepath'];
|
|
|
|
// // === S3 클라이언트 생성 ===
|
|
// // Test 버킷 (Read/Delete)
|
|
// $testS3 = new S3Client([
|
|
// 'version' => 'latest',
|
|
// 'region' => 'auto',
|
|
// 'endpoint' => 'https://81fa2d48964d31dd0da9558f9ce601d1.r2.cloudflarestorage.com',
|
|
// 'credentials' => [
|
|
// 'key' => '9ade5915f7abd402db60a87f3b3b6d76', // ✅ write key
|
|
// 'secret' => 'a1a1cfd59f739977f98fb73f214894e39dbac9a39b1f6208020aa2e1303ea54c',
|
|
// ]
|
|
// ]);
|
|
|
|
// // Release 버킷 (Write)
|
|
// $releaseS3 = new S3Client([
|
|
// 'version' => 'latest',
|
|
// 'region' => 'auto',
|
|
// 'endpoint' => 'https://81fa2d48964d31dd0da9558f9ce601d1.r2.cloudflarestorage.com',
|
|
// 'credentials' => [
|
|
// 'key' => '4d0b8feaf0e12873a3d95bd3aa0b787c',
|
|
// 'secret' => 'dc72a027e5263590f0bc89fc0b5a1e6c846cc4f036642430681364c4a9056ca4',
|
|
// ]
|
|
// ]);
|
|
|
|
// try {
|
|
// // 1. 원본 객체 다운로드
|
|
// $object = $testS3->getObject([
|
|
// 'Bucket' => $sourceBucket,
|
|
// 'Key' => $objectKey,
|
|
// ]);
|
|
|
|
// // 2. Release 버킷에 업로드
|
|
// $releaseS3->putObject([
|
|
// 'Bucket' => $targetBucket,
|
|
// 'Key' => $objectKey,
|
|
// 'Body' => $object['Body'],
|
|
// ]);
|
|
|
|
// // 3. Test 버킷에서 원본 삭제
|
|
// $testS3->deleteObject([
|
|
// 'Bucket' => $sourceBucket,
|
|
// 'Key' => $objectKey,
|
|
// ]);
|
|
|
|
// // 4. DB 업데이트
|
|
// $stmt = $conn->prepare("UPDATE deploy_files SET release_date=NOW(), releaser=? WHERE id=?");
|
|
// $stmt->bind_param("si", $releaser, $file_id);
|
|
// $stmt->execute();
|
|
|
|
// echo json_encode([
|
|
// 'status' => 'ok',
|
|
// 'message' => '릴리즈 확정 완료',
|
|
// 'targetKey' => $objectKey,
|
|
// ]);
|
|
|
|
// } catch (AwsException $e) {
|
|
// http_response_code(500);
|
|
// echo json_encode([
|
|
// 'status' => 'fail',
|
|
// 'message' => '릴리즈 실패: '.$e->getAwsErrorMessage(),
|
|
// 'error' => $e->getMessage()
|
|
// ]);
|
|
// }
|
|
?>
|
|
|
|
<?php
|
|
ini_set('display_errors', 1);
|
|
ini_set('display_startup_errors', 1);
|
|
error_reporting(E_ALL);
|
|
header("Content-Type: application/json; charset=utf-8");
|
|
|
|
require __DIR__ . '/../vendor/autoload.php'; // AWS SDK 로드
|
|
|
|
|
|
use Aws\S3\S3Client;
|
|
use Aws\Exception\AwsException;
|
|
|
|
// === DB 연결 ===
|
|
$conn = new mysqli('localhost', 'egbim', 'baron3840!!', 'egbim');
|
|
if ($conn->connect_error) {
|
|
http_response_code(500);
|
|
echo json_encode(['message' => 'DB 연결 실패']);
|
|
exit;
|
|
}
|
|
mysqli_set_charset($conn, 'utf8mb4');
|
|
|
|
// === 파라미터 ===
|
|
$product_code = $_POST['product_code'] ?? '';
|
|
$sw_version = $_POST['sw_version'] ?? '';
|
|
// 릴리즈 처리 → releaser를 세션에서 가져옴
|
|
$releaser = $_POST['releaser'] ?? '알 수 없음'; // JS에서 넘겨준 userName
|
|
$loginId = $_POST['loginId'] ?? ''; // JS에서 넘겨준 loginId
|
|
|
|
if (!$product_code || !$sw_version) {
|
|
http_response_code(400);
|
|
echo json_encode(['message' => '필수값 누락']);
|
|
exit;
|
|
}
|
|
|
|
// === 대상 파일 목록 조회 ===
|
|
$sql = "SELECT * FROM deploy_files WHERE product_code=? AND sw_version=? AND deleted=0";
|
|
$stmt = $conn->prepare($sql);
|
|
$stmt->bind_param("ss", $product_code, $sw_version);
|
|
$stmt->execute();
|
|
$res = $stmt->get_result();
|
|
|
|
$files = [];
|
|
while ($row = $res->fetch_assoc()) {
|
|
$files[] = $row;
|
|
}
|
|
$stmt->close();
|
|
|
|
if (empty($files)) {
|
|
http_response_code(404);
|
|
echo json_encode(['message' => '해당 버전에 대한 파일이 없습니다.']);
|
|
exit;
|
|
}
|
|
|
|
// ✅ 테스트 완료 여부 체크
|
|
if (empty($files[0]['test_done_date'])) {
|
|
echo json_encode(['status'=>'fail','message'=>'테스트 완료 후 릴리즈 가능합니다.']);
|
|
exit;
|
|
}
|
|
|
|
// === 버킷 설정 ===
|
|
$sourceBucket = 'baron-software-test';
|
|
$targetBucket = 'baron-software-release';
|
|
|
|
$s3 = new S3Client([
|
|
'version' => 'latest',
|
|
'region' => 'auto',
|
|
'endpoint' => 'https://81fa2d48964d31dd0da9558f9ce601d1.r2.cloudflarestorage.com',
|
|
'credentials' => [
|
|
// ❗ source(read/write) + target(write) 권한이 모두 있는 키
|
|
'key' => '11d7027f505658acb3aeb40c3955a206',
|
|
'secret' => '65a78f6c582e0bdfccc2f431fc7b7be2ba11f999f0a8a87142011eac8b84761f',
|
|
]
|
|
]);
|
|
|
|
$success = [];
|
|
$failed = [];
|
|
|
|
foreach ($files as $file) {
|
|
$objectKey = $file['filepath'];
|
|
|
|
try {
|
|
// 1. CopyObject (테스트 → 릴리즈)
|
|
$s3->copyObject([
|
|
'Bucket' => $targetBucket,
|
|
'Key' => $objectKey,
|
|
'CopySource' => $sourceBucket . '/' . $objectKey,
|
|
]);
|
|
|
|
// 2. 원본 삭제 (테스트 버킷)
|
|
$s3->deleteObject([
|
|
'Bucket' => $sourceBucket,
|
|
'Key' => $objectKey,
|
|
]);
|
|
|
|
$success[] = $objectKey;
|
|
} catch (AwsException $e) {
|
|
$failed[] = $objectKey;
|
|
}
|
|
}
|
|
|
|
if (!empty($failed)) {
|
|
// ❌ 하나라도 실패 → 전체 실패 처리
|
|
echo json_encode([
|
|
'status' => 'fail',
|
|
'message' => '릴리즈 실패: 일부 파일 이동 오류',
|
|
'failed' => $failed
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
// ✅ 여기까지 오면 전체 이동 성공
|
|
// 1) deploy_files 업데이트
|
|
$stmt = $conn->prepare("
|
|
UPDATE deploy_files
|
|
SET release_date = NOW(), releaser = ?
|
|
WHERE product_code=? AND sw_version=? AND deleted=0
|
|
");
|
|
$stmt->bind_param("sss", $releaser, $product_code, $sw_version);
|
|
$stmt->execute();
|
|
$stmt->close();
|
|
|
|
// 2) deploy_versions.family_version 갱신
|
|
$stmt2 = $conn->prepare("
|
|
INSERT INTO deploy_versions (product_code, family_version, updated_at)
|
|
VALUES (?, ?, NOW())
|
|
ON DUPLICATE KEY UPDATE
|
|
family_version = VALUES(family_version),
|
|
updated_at = NOW()
|
|
");
|
|
$stmt2->bind_param("ss", $product_code, $sw_version);
|
|
$stmt2->execute();
|
|
$stmt2->close();
|
|
|
|
// 최종 응답
|
|
echo json_encode([
|
|
'status' => 'ok',
|
|
'message' => '릴리즈 확정 완료',
|
|
'moved' => $success,
|
|
'release_date' => date('Y-m-d H:i:s'),
|
|
'releaser' => $releaser
|
|
]);
|
|
|