Skip to content

Commit

Permalink
Analyze artifact for version and package
Browse files Browse the repository at this point in the history
  • Loading branch information
yunusefendi52 committed May 1, 2024
1 parent 284498c commit 453c136
Show file tree
Hide file tree
Showing 18 changed files with 603 additions and 30 deletions.
Binary file modified bun.lockb
Binary file not shown.
9 changes: 6 additions & 3 deletions components/AppFileUpload.vue
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
</template>

<script setup lang="ts">
import JSZip from 'jszip';
import { UpdateGroupsRequest } from '~/server/api/update-artifact-groups.put';
const releaseNotes = ref<string | null>(null)
Expand All @@ -25,8 +26,8 @@ const orgName = ref<string>('')
const appName = ref<string>('')
osType.value = dialogRef.value.data.osType
prop.value = dialogRef.value.data.props
orgName.value = dialogRef.value.data.orgName
appName.value = dialogRef.value.data.appName
orgName.value = dialogRef.value.data.props.orgName
appName.value = dialogRef.value.data.props.appName
const mimeTypeFromOsType = computed(() => getMimeTypeFromosType(osType.value ?? 'android'))
const fileRef = ref<HTMLInputElement | null>(null)
Expand Down Expand Up @@ -96,6 +97,8 @@ const onUpload = async (file: File) => {
releaseNotes: releaseNotes.value,
},
})
return data
return {
artifactId: data?.artifactId,
}
};
</script>
4 changes: 1 addition & 3 deletions components/Releases.vue
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ const list = computed(() => data.value as any[])
const dialog = useDialog();
const osType = inject<OsType>('detail-app')
const osType = inject<ComputedRef<OsType>>('detail-app')
const upload = () => {
dialog.open(AppFileUpload, {
Expand All @@ -58,8 +58,6 @@ const upload = () => {
data: {
osType,
props,
orgName: props.orgName,
appName: props.appName,
},
onClose: (o) => {
if (o?.data?.success) {
Expand Down
4 changes: 4 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,15 @@
"@aws-sdk/s3-request-presigner": "^3.556.0",
"@hebilicious/vue-query-nuxt": "^0.3.0",
"@libsql/client": "^0.6.0",
"@plist/parse": "^1.1.0",
"@tanstack/vue-query": "^5.28.9",
"@xmldom/xmldom": "^0.8.10",
"adbkit-apkreader": "^3.2.0",
"chart.js": "3.3.2",
"drizzle-orm": "^0.30.7",
"h3": "^1.11.1",
"jose": "^5.2.4",
"jszip": "^3.10.1",
"lodash": "^4.17.21",
"moment": "^2.30.1",
"pg": "^8.11.3",
Expand Down
2 changes: 1 addition & 1 deletion pages/orgs/[orgName]/apps/[appId]/[detailArtifact].vue
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
<span class="font-semibold">File metadata</span>
<div class="flex flex-col">
<label>{{ `MD5: ${detailArtifact?.fileMetadata?.md5?.replaceAll('"', '')}` }}</label>
<label>{{ `File Extension: ${getExtensionFromMimeType(detailArtifact?.fileMetadata?.contentType)}`
<label>{{ `File Extension: ${detailArtifact?.extension}`
}}</label>
<label>{{ `File Size: ${formatBytes(detailArtifact?.fileMetadata?.contentLength ?? 0)}` }}</label>
</div>
Expand Down
4 changes: 3 additions & 1 deletion pages/orgs/[orgName]/apps/[appId]/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,9 @@ const detailApp = useFetch('/api/detail-app', {
orgName: orgName,
},
})
provide('detail-app', toOsType(detailApp.data.value?.osType))
const osType = computed(() => toOsType(detailApp.data.value?.osType))
provide('detail-app', osType)
</script>

<style>
Expand Down
1 change: 1 addition & 0 deletions server/api/artifacts/detail-artifact.get.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { generateRandomPassword, getStorageKeys } from "~/server/utils/utils"
import { takeUniqueOrThrow } from "../detail-app.get"
import { GetObjectAttributesCommand, GetObjectTaggingCommand, HeadObjectCommand, ObjectAttributes } from "@aws-sdk/client-s3"
import { S3AppClient, type AppHeadObjectCommandOutput } from "~/server/services/S3AppClient"
import { readPackageFile } from "~/server/utils/package-reader"

export default defineEventHandler(async (event) => {
const db = event.context.drizzle
Expand Down
2 changes: 1 addition & 1 deletion server/api/artifacts/download-artifact.get.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export default defineEventHandler(async (event) => {
const signedUrl = await s3.getSignedUrlGetObject(event, new GetObjectCommand({
Bucket: s3BucketName,
Key: assets,
ResponseContentDisposition: `attachment; filename ="${app.name}"`,
ResponseContentDisposition: `attachment; filename ="${app.name}${detailArtifact.extension ? `.${detailArtifact.extension}` : ''}"`,
}), 1800)
await sendRedirect(event, signedUrl)
})
50 changes: 36 additions & 14 deletions server/api/artifacts/upload-artifact-url.post.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { and, eq } from "drizzle-orm"
import { artifacts, organizations, organizationsPeople } from "~/server/db/schema"
import { getStorageKeys, s3BucketName } from "~/server/utils/utils"
import { takeUniqueOrThrow } from "../detail-app.get"
import { CopyObjectCommand, DeleteObjectCommand } from "@aws-sdk/client-s3"
import { CopyObjectCommand, DeleteObjectCommand, GetObjectCommand } from "@aws-sdk/client-s3"
import { S3AppClient } from "~/server/services/S3AppClient"

export default defineEventHandler(async (event) => {
Expand All @@ -21,6 +21,37 @@ export default defineEventHandler(async (event) => {
return operators.and(operators.eq(fields.organizationsId, userOrg.organizationsId!), operators.eq(fields.name, appName!.toString()))
},
}).then(takeUniqueOrThrow)
const { temp, assets } = getStorageKeys(userOrg.organizationsId!, app.id, key)

// Processing the file
const s3 = new S3AppClient()
const tempSignedUrl = await s3.getSignedUrlGetObject(event, new GetObjectCommand({
Bucket: s3BucketName,
Key: temp,
}), 1800)
const response = await fetch(tempSignedUrl)
if (!response.ok) {
setResponseStatus(event, 400)
return
}
const arrayBuffer = await response.arrayBuffer() // WARNING: This will download to memory
const packageData = await readPackageFile(arrayBuffer)
if (!packageData) {
setResponseStatus(event, 400, 'Cannot read package')
return
}

await s3.copyObject(event, new CopyObjectCommand({
CopySource: `${s3BucketName}/${temp}`,
Bucket: s3BucketName,
Key: assets,
}))
await s3.deleteObject(event, new DeleteObjectCommand({
Bucket: s3BucketName,
Key: temp,
}))

// Inserting to db
const lastArtifact = await db.query.artifacts.findFirst({
orderBy(fields, operators) {
return operators.desc(fields.releaseId)
Expand All @@ -37,23 +68,14 @@ export default defineEventHandler(async (event) => {
createdAt: now,
updatedAt: now,
fileObjectKey: key,
versionCode2: '1',
versionName2: '1.0.0',
versionCode2: packageData?.versionCode?.toString()!,
versionName2: packageData?.versionName!,
appsId: app.id,
releaseNotes: releaseNotes,
releaseId: newReleaseId,
extension: packageData?.extension,
packageName: packageData?.metadata?.packageName,
})
const { temp, assets } = getStorageKeys(userOrg.organizationsId!, app.id, key)
const s3 = new S3AppClient()
await s3.copyObject(event, new CopyObjectCommand({
CopySource: `${s3BucketName}/${temp}`,
Bucket: s3BucketName,
Key: assets,
}))
await s3.deleteObject(event, new DeleteObjectCommand({
Bucket: s3BucketName,
Key: temp,
}))

return {
artifactId: artifactsId,
Expand Down
7 changes: 3 additions & 4 deletions server/api/artifacts/upload-artifact.post.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,14 @@ export default defineEventHandler(async (event) => {
}).then(takeUniqueOrThrow)

const key = generateRandomPassword()
var expires = 300;
var expires = 500;
const { temp } = getStorageKeys(userOrg.organizationsId!, app.id, key)
const limitUploadSizeMb = useRuntimeConfig(event)
const s3 = new S3AppClient()
const signedUrl = await s3.getSignedUrlPutObject(event, new PutObjectCommand({
Bucket: s3BucketName,
Key: temp,
ContentLength: limitUploadSizeMb.app.limitUploadSizeMb,
}), expires)
// ContentLength: limitUploadSizeMb.app.limitUploadSizeMb,
}), expires)
return {
file: key,
url: signedUrl,
Expand Down
2 changes: 1 addition & 1 deletion server/api/install/download.get.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export default defineEventHandler(async (event) => {
const signedUrl = await s3.getSignedUrlGetObject(event, new GetObjectCommand({
Bucket: s3BucketName,
Key: assets,
ResponseContentDisposition: `attachment; filename ="${app.name}"`
ResponseContentDisposition: `attachment; filename ="${app.name}${detailArtifact.extension ? `.${detailArtifact.extension}` : ''}"`,
}), 1800)
await sendRedirect(event, signedUrl)
})
2 changes: 1 addition & 1 deletion server/db/db.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ import * as schema from '~/server/db/schema';
const db = (env: any) => drizzle(createClient({
url: env.DB_URL ?? env.NUXT_DB_URL,
authToken: env.DB_AUTH_TOKEN ?? env.NUXT_DB_AUTH_TOKEN,
}), { schema, logger: env.enableLogging ?? env.NUXT_APP_ENABLE_DRIZZLE_LOGGING ?? true });
}), { schema, logger: env?.enableLogging ?? env?.NUXT_APP_ENABLE_DRIZZLE_LOGGING ?? true });
export default db
2 changes: 2 additions & 0 deletions server/db/drizzle/0010_jittery_warbird.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE artifacts ADD `extension` text;--> statement-breakpoint
ALTER TABLE artifacts ADD `packageName` text;
Loading

0 comments on commit 453c136

Please sign in to comment.