feat: complete release preparation, 10+ ad mediation, CI/CD, and docker deployment
Some checks failed
CI Pipeline / Code Quality & Typecheck (push) Waiting to run
CI Pipeline / Test Suite (macos-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (ubuntu-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (windows-latest) (push) Blocked by required conditions
CI Pipeline / Build Validation (admin) (push) Blocked by required conditions
CI Pipeline / Build Validation (desktop) (push) Blocked by required conditions
Deploy Landing Page / deploy (push) Blocked by required conditions
Deploy Landing Page / build (push) Waiting to run
Release & Packaging Pipeline / Build & Publish Admin Docker Image (push) Failing after 8s
Release & Code Signing CA Pipeline / build-and-sign-windows (push) Failing after 1m51s
Build macOS / Build & Package (macOS) (push) Failing after 4s
Build macOS / Build & Package (macOS)-1 (push) Failing after 5s
Release & Code Signing CA Pipeline / build-and-sign-macos (push) Failing after 3s
Release & Packaging Pipeline / Package macOS Desktop App (push) Failing after 4s
Release & Packaging Pipeline / Package Windows Desktop App (push) Failing after 2m28s
Release & Packaging Pipeline / Publish Official GitHub Release (push) Has been skipped

This commit is contained in:
Yun Chan 2026-08-20 11:12:05 +09:00
parent 5cd1de6859
commit 708e20f747
406 changed files with 42464 additions and 6199 deletions

View file

@ -0,0 +1,214 @@
// scripts/playwright-live-ad-portals-signup.js
// Playwright Automation: Navigates to live ad portals, fills publisher registration forms with user credentials, and captures progress.
const { chromium } = require('@playwright/test');
const path = require('path');
const fs = require('fs');
const OUTPUT_DIR = 'C:/Users/encep/.gemini/antigravity-cli/brain/3ab7ae82-5634-41d5-93a7-3c12c22503e2/screenshots/live_portal_signups';
const USER_CREDENTIALS = {
email: 'yunchanpaca@gmail.com',
password: 'ONVI2v4J#y',
firstName: 'Yunchan',
lastName: 'Park',
fullName: 'Yunchan Park',
company: 'D3RO Voice AI',
appName: 'D3RO Voice AI (Desktop & Web AI Assistant)',
appUrl: 'https://d3ro.app',
monthlyImpressions: '100,000+',
country: 'South Korea',
};
async function runLiveAdPortalsSignup() {
if (!fs.existsSync(OUTPUT_DIR)) {
fs.mkdirSync(OUTPUT_DIR, { recursive: true });
}
console.log('--- Launching Playwright Browser Automation for Live Ad Portals Signup ---');
const browser = await chromium.launch({
channel: 'msedge',
headless: true, // headless mode for reliable capture in CLI environment
});
const context = await browser.newContext({
viewport: { width: 1440, height: 960 },
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0',
});
const results = [];
// ==========================================
// 1. EthicalAds Publisher Application
// ==========================================
try {
console.log('[1/5] Navigating to EthicalAds Publisher Application...');
const page = await context.newPage();
await page.goto('https://www.ethicalads.io/publishers/apply/', { waitUntil: 'domcontentloaded', timeout: 30000 });
await page.waitForTimeout(2000);
// Fill form fields
const nameInput = page.locator('input[name="name"], input[id*="name"]').first();
const emailInput = page.locator('input[name="email"], input[type="email"], input[id*="email"]').first();
const siteInput = page.locator('input[name*="site"], input[name*="url"], input[id*="url"]').first();
const trafficInput = page.locator('input[name*="views"], input[name*="traffic"], select[name*="traffic"]').first();
if (await nameInput.isVisible()) await nameInput.fill(USER_CREDENTIALS.fullName);
if (await emailInput.isVisible()) await emailInput.fill(USER_CREDENTIALS.email);
if (await siteInput.isVisible()) await siteInput.fill(USER_CREDENTIALS.appUrl);
await page.waitForTimeout(1000);
const shotPath = path.join(OUTPUT_DIR, '01_ethicalads_signup_filled.png');
await page.screenshot({ path: shotPath, fullPage: true });
results.push({ portal: 'EthicalAds', status: 'Form Filled & Captured', screenshot: shotPath });
await page.close();
} catch (err) {
console.error('EthicalAds signup error:', err.message);
}
// ==========================================
// 2. AppLovin MAX Developer Signup
// ==========================================
try {
console.log('[2/5] Navigating to AppLovin MAX Developer Signup...');
const page = await context.newPage();
await page.goto('https://dash.applovin.com/signup', { waitUntil: 'domcontentloaded', timeout: 30000 });
await page.waitForTimeout(3000);
const emailInput = page.locator('input[name="email"], input[type="email"]').first();
const nameInput = page.locator('input[name="name"], input[name="fullName"]').first();
const companyInput = page.locator('input[name="company"], input[name="companyName"]').first();
const websiteInput = page.locator('input[name="website"], input[name="url"]').first();
if (await emailInput.isVisible()) await emailInput.fill(USER_CREDENTIALS.email);
if (await nameInput.isVisible()) await nameInput.fill(USER_CREDENTIALS.fullName);
if (await companyInput.isVisible()) await companyInput.fill(USER_CREDENTIALS.company);
if (await websiteInput.isVisible()) await websiteInput.fill(USER_CREDENTIALS.appUrl);
await page.waitForTimeout(1000);
const shotPath = path.join(OUTPUT_DIR, '02_applovin_max_signup_filled.png');
await page.screenshot({ path: shotPath, fullPage: false });
results.push({ portal: 'AppLovin MAX', status: 'Form Filled & Captured', screenshot: shotPath });
await page.close();
} catch (err) {
console.error('AppLovin signup error:', err.message);
}
// ==========================================
// 3. Mintegral Publisher / Developer Signup
// ==========================================
try {
console.log('[3/5] Navigating to Mintegral Publisher Signup...');
const page = await context.newPage();
await page.goto('https://www.mintegral.com/en/signup', { waitUntil: 'domcontentloaded', timeout: 30000 });
await page.waitForTimeout(3000);
const emailInput = page.locator('input[type="email"], input[placeholder*="email" i]').first();
const passwordInput = page.locator('input[type="password"]').first();
if (await emailInput.isVisible()) await emailInput.fill(USER_CREDENTIALS.email);
if (await passwordInput.isVisible()) await passwordInput.fill(USER_CREDENTIALS.password);
await page.waitForTimeout(1000);
const shotPath = path.join(OUTPUT_DIR, '03_mintegral_signup_filled.png');
await page.screenshot({ path: shotPath, fullPage: false });
results.push({ portal: 'Mintegral', status: 'Form Filled & Captured', screenshot: shotPath });
await page.close();
} catch (err) {
console.error('Mintegral signup error:', err.message);
}
// ==========================================
// 4. Playwire Publisher Application Form
// ==========================================
try {
console.log('[4/5] Navigating to Playwire Publisher Application...');
const page = await context.newPage();
await page.goto('https://www.playwire.com/contact-direct', { waitUntil: 'domcontentloaded', timeout: 30000 });
await page.waitForTimeout(3000);
const firstNameInput = page.locator('input[name*="firstname" i]').first();
const lastNameInput = page.locator('input[name*="lastname" i]').first();
const emailInput = page.locator('input[name*="email" i], input[type="email"]').first();
const websiteInput = page.locator('input[name*="website" i], input[name*="url" i]').first();
if (await firstNameInput.isVisible()) await firstNameInput.fill(USER_CREDENTIALS.firstName);
if (await lastNameInput.isVisible()) await lastNameInput.fill(USER_CREDENTIALS.lastName);
if (await emailInput.isVisible()) await emailInput.fill(USER_CREDENTIALS.email);
if (await websiteInput.isVisible()) await websiteInput.fill(USER_CREDENTIALS.appUrl);
await page.waitForTimeout(1000);
const shotPath = path.join(OUTPUT_DIR, '04_playwire_application_filled.png');
await page.screenshot({ path: shotPath, fullPage: true });
results.push({ portal: 'Playwire', status: 'Form Filled & Captured', screenshot: shotPath });
await page.close();
} catch (err) {
console.error('Playwire signup error:', err.message);
}
// ==========================================
// 5. BuySellAds (Carbon Ads) Publisher Portal
// ==========================================
try {
console.log('[5/5] Navigating to BuySellAds (Carbon) Publisher Portal...');
const page = await context.newPage();
await page.goto('https://www.buysellads.com/publishers', { waitUntil: 'domcontentloaded', timeout: 30000 });
await page.waitForTimeout(3000);
const applyButton = page.locator('a:has-text("Apply"), button:has-text("Apply"), a:has-text("Get Started")').first();
if (await applyButton.isVisible()) {
await applyButton.click();
await page.waitForTimeout(2000);
}
const shotPath = path.join(OUTPUT_DIR, '05_buysellads_carbon_publisher_apply.png');
await page.screenshot({ path: shotPath, fullPage: true });
results.push({ portal: 'BuySellAds (Carbon)', status: 'Form Navigated & Captured', screenshot: shotPath });
await page.close();
} catch (err) {
console.error('BuySellAds signup error:', err.message);
}
// ==========================================
// 6. Unity ID / Unity Gaming Services
// ==========================================
try {
console.log('[6/6] Navigating to Unity ID Registration...');
const page = await context.newPage();
await page.goto('https://id.unity.com/en/conversations/new', { waitUntil: 'domcontentloaded', timeout: 30000 });
await page.waitForTimeout(3000);
const emailInput = page.locator('input[name="conversations_create_user_form[email]"], input[type="email"]').first();
const passwordInput = page.locator('input[name="conversations_create_user_form[password]"], input[type="password"]').first();
const usernameInput = page.locator('input[name="conversations_create_user_form[username]"], input[name*="username"]').first();
const fullnameInput = page.locator('input[name="conversations_create_user_form[full_name]"], input[name*="name"]').first();
if (await emailInput.isVisible()) await emailInput.fill(USER_CREDENTIALS.email);
if (await passwordInput.isVisible()) await passwordInput.fill(USER_CREDENTIALS.password);
if (await usernameInput.isVisible()) await usernameInput.fill('yunchanpaca');
if (await fullnameInput.isVisible()) await fullnameInput.fill(USER_CREDENTIALS.fullName);
await page.waitForTimeout(1000);
const shotPath = path.join(OUTPUT_DIR, '06_unity_cloud_signup_filled.png');
await page.screenshot({ path: shotPath, fullPage: false });
results.push({ portal: 'Unity Ads (LevelPlay)', status: 'Form Filled & Captured', screenshot: shotPath });
await page.close();
} catch (err) {
console.error('Unity signup error:', err.message);
}
await browser.close();
fs.writeFileSync(
path.join(OUTPUT_DIR, 'signup_automation_summary.json'),
JSON.stringify(results, null, 2),
'utf8'
);
console.log('--- Playwright Live Ad Portals Signup Automation Finished Successfully! ---');
}
runLiveAdPortalsSignup().catch((err) => {
console.error('Live Ad Portals Signup Automation Error:', err);
process.exit(1);
});