Commit 6ed6079d authored by nano's avatar nano

delete local files

parent 045e05c1
This diff is collapsed.
import * as path from 'path';
let baseUrl = 'http://127.0.01:8001'
let testUrl = 'http://114.215.243.95:8001'
export default {
upload_path: path.join(__dirname, './test/upload'),
download_path: path.join(__dirname, './test/release/downloads'),
new_apps_json: `${baseUrl}/v2/apps`,
upload_url: `${testUrl}/v1/upload/packageUrl`,
old_apps_json: 'https://api.moecube.com/apps.json',
new_package: `${baseUrl}/v1/package/`,
new_app: (appId) => `${baseUrl}/v1/app/${appId}`,
old_metalinks: (package_id) => `https://cdn01.moecube.com/release/metalinks/${package_id}.meta4llf`,
old_metalinks: (package_id) => `https://cdn01.moecube.com/release/metalinks/${package_id}.meta4`,
new_metalinks: (package_id) => `${baseUrl}/${package_id}/meta`,
old_checksums: (package_id) => `https://cdn01.moecube.com/release/checksums/${package_id}`,
new_checksums: (package_id) => `${baseUrl}/${package_id}/checksum`,
......
import axios from 'axios';
import config from './config';
import * as uuid from 'uuid';
import * as _ from 'lodash';
import {XmlDocument} from 'xmldoc';
let apps = {};
const locales = ['zh-CN', 'zh-TW', 'en-US', 'ja-JP'];
const languagePack = ['zh-CN', 'en-US'];
const platforms = ['win32', 'darwin'];
const lang = {
'en-US': {
'en-US': 'English',
'zh-CN': 'Simplified Chinese',
'zh-TW': 'Traditional Chinese',
'language_pack': 'Language Pack'
},
'zh-CN': {
'en-US': '英文',
'zh-CN': '简体中文',
'zh-TW': '繁体中文',
'language_pack': '语言包'
}
};
async function createPackage(app) {
return await axios.post(config.new_package, {
id: uuid.v1(),
appId: app.id,
locales: locales,
platforms: platforms,
version: '0.0.1',
});
}
async function updatePackage(app, pack) {
let {data} = await axios.get(config.old_metalinks(app.id));
const xml = new XmlDocument(data);
const rawUrl = xml.valueWithPath('file.url');
const url = rawUrl.replace('https://r.my-card.in/dist/', 'https://r.my-card.in/release/dist/');
if (app.name == 'th1') {
return await axios.post(config.upload_url, {
_id: pack._id,
url
});
}
}
async function createApp(app) {
return await axios.post(config.new_app(app.id), {
......@@ -11,30 +57,46 @@ async function createApp(app) {
});
}
function handleName(app) {
return Object.assign({}, ...languagePack.map(language => ({
/* tslint:disable */
[language]: `${apps[app.parent]['name'][language]} ${lang[language]['language_pack']} (${app.locales.map(locale => lang[language][locale])})`
/* tslint:enable */
})));
}
async function updateApp(app) {
const {id, name, description, developers, publishers, released_at, category, tags, dependencies, references, homepage, actions, version, conference, icon, cover, background, news, ...other} = app;
return await axios.patch(config.new_app(app.id), {
id,
name,
description,
developers,
publishers,
released_at,
category,
tags,
dependencies,
references,
homepage,
homepage,
actions,
version,
conference,
icon,
cover,
background,
news: {}
...other,
});
const {
id, name, description, developers, publishers, released_at, category, tags, dependencies, references,
homepage, actions, version, conference, icon, cover, background, locales, author, news, ...other
} = app;
await
axios.patch(config.new_app(app.id), {
id,
name: name || handleName(app),
description,
developers,
publishers,
released_at,
category,
tags,
dependencies,
references,
homepage,
actions,
version,
conference,
icon,
cover,
background,
locales: locales || [],
news: {},
...other,
});
let {data} = await createPackage(app);
await updatePackage(app, data);
}
......@@ -44,9 +106,13 @@ async function main() {
let {data} = await axios.get(config.old_apps_json);
try {
for (let app of data) {
await createApp(app).catch(error => {});
await updateApp(app);
for (let app of _.sampleSize(data, 5)) {
if (!['ygopro', 'desmume', 'test'].includes(app.id)) {
apps[app.id] = app;
await createApp(app).catch(error => {
});
await updateApp(app);
}
}
} catch (e) {
console.trace(e);
......
......@@ -79,6 +79,9 @@ export async function bundle(...args) {
let fullPath = path.join(path.dirname(filePath), `${fullHash}.tar.gz`);
await fs.renameAsync(filePath, fullPath);
await fs.removeAsync(uploadFile_path)
await fs.removeAsync(package_path)
return {
distPath: dist_path,
files: Array.from(files.values()),
......
......@@ -9,21 +9,32 @@ interface Platform<T> {
[platform: string]: T;
}
interface Package {
id: string;
name: string;
platforms: Platform<string[]>;
locales: I18n<string[]>;
files: File[];
}
// interface Package {
// id: string;
// name: string;
// platforms: Platform<string[]>;
// locales: I18n<string[]>;
// files: File[];
// }
//
// interface File {
// path: string;
// size: number;
// hash: string;
// }
interface File {
path: string;
size: number;
hash: string;
interface Trailer {
type: string;
url: string;
poster: string;
}
interface Achievement {
name: string;
description: string;
image: string;
progress_max: number;
}
export interface App {
......@@ -37,7 +48,7 @@ export interface App {
released_at?: string;
category?: string;
parent?: string;
tag?: string[];
tags?: string[];
dependencies?: Platform<string[]>;
references?: Platform<string[]>;
homepage?: string;
......@@ -52,6 +63,8 @@ export interface App {
cover?: string;
background?: string;
created_at?: Date;
trailer?: Trailer[];
achievements?: Achievement[];
}
@Collection('apps')
......@@ -78,7 +91,7 @@ export class AppSchema extends Instance<App, AppSchema> implements App {
@Property(String, false)
parent?: string;
@Property(Array, false)
tag?: string[];
tags?: string[];
@Property(Object, false)
dependencies?: Platform<string[]>;
@Property(Object, false)
......@@ -90,7 +103,7 @@ export class AppSchema extends Instance<App, AppSchema> implements App {
@Property(Object, false)
actions?: Platform<{ [key: string]: { execuate: string, args: string[], env: { [key: string]: string } } }>;
@Property(Object, false)
files?: { [key: string]: { sync: boolean, ignore: boolean} };
files?: { [key: string]: { sync: boolean, ignore: boolean } };
@Property(Object, false)
version?: Platform<string>;
@Property(Object, false)
......@@ -105,10 +118,13 @@ export class AppSchema extends Instance<App, AppSchema> implements App {
cover?: string;
@Property(String, false)
background?: string;
// @Property(Array, false)
// packages?: Package[];
@Property(Date, false)
created_at: Date;
created_at?: Date;
@Property(Array, false)
trailer?: Trailer[];
@Property(Array, false)
achievements?: Achievement[];
static onCreating(app: App) {
app.created_at = new Date();
......
......@@ -108,6 +108,9 @@ export const UploadPackage = async (ctx: Context) => {
await mongodb.Packages.update({id: pack!.id}, {$set: {status: 'deprecated'}}, {multi: true});
await pack!.save();
// 上传完,干掉本地目录
await fs.removeAsync(bundled.distPath)
} catch (e) {
pack!.status = 'failed';
......@@ -170,6 +173,9 @@ const uploadPackageUrl = async (ctx: Context) => {
await mongodb.Packages.update({id: pack!.id}, {$set: {status: 'deprecated'}}, {multi: true});
await pack!.save();
// 上传完,干掉本地目录
await fs.removeAsync(bundled.distPath)
} catch (e) {
pack!.status = 'failed';
await pack!.save();
......
......@@ -28,9 +28,13 @@ async function test_download() {
const app: any = _.sample(apps);
console.log(`正在测试 ${app.id} 的 下载`);
const metalink = await (await fetch(config.new_metalinks(app.id))).text();
const xml = new XmlDocument(metalink);
const url = xml.valueWithPath('file.url');
const response = await fetch(url, {method: 'HEAD'});
if (!response.ok) {
throw `${app.id} 的 下载地址 ${url} 返回 ${response.statusText}`;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment