Pre-launch — Gluecron is in final validation. Public signups and git hosting for non-owner users open after launch review.
CodeIssuesDiscussionsWikiPull RequestsProjectsCommitsActionsReleasesContributorsPulse● GatesSecuritySettingsDeploymentsPipelineInsightsAgents✨ Explain✨ Ask AI✨ Workspace✨ Spec✨ Tests▓ Debt Map✨ NL Search🏛 Archaeology
Blame · Line-by-line history

0009_packages.sql

Each line is annotated with the commit that last touched it. Click any SHA to jump to that commit and see the surrounding change.

0009_packages.sqlBlame65 lines · 1 contributor
e2da5c6Claude1-- Gluecron migration 0009: Block C2 — Package registry (npm-compatible).
2--
3-- Tables:
4-- packages — logical package (one per repo per ecosystem)
5-- package_versions — published versions with tarball stored as bytea
6-- package_tags — dist tags (latest, beta, etc.)
7
8--> statement-breakpoint
9CREATE TABLE IF NOT EXISTS "packages" (
10 "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
11 "repository_id" uuid NOT NULL,
12 "ecosystem" text NOT NULL DEFAULT 'npm',
13 "scope" text,
14 "name" text NOT NULL,
15 "description" text,
16 "readme" text,
17 "homepage" text,
18 "license" text,
19 "visibility" text NOT NULL DEFAULT 'public',
20 "created_at" timestamp DEFAULT now() NOT NULL,
21 "updated_at" timestamp DEFAULT now() NOT NULL,
22 CONSTRAINT "packages_repo_fk" FOREIGN KEY ("repository_id") REFERENCES "repositories"("id") ON DELETE cascade
23);
24
25--> statement-breakpoint
26CREATE INDEX IF NOT EXISTS "packages_repo" ON "packages" ("repository_id");
27--> statement-breakpoint
28CREATE UNIQUE INDEX IF NOT EXISTS "packages_eco_scope_name" ON "packages" ("ecosystem", "scope", "name");
29
30--> statement-breakpoint
31CREATE TABLE IF NOT EXISTS "package_versions" (
32 "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
33 "package_id" uuid NOT NULL,
34 "version" text NOT NULL,
35 "shasum" text NOT NULL,
36 "integrity" text,
37 "size_bytes" integer NOT NULL DEFAULT 0,
38 "metadata" text NOT NULL DEFAULT '{}',
39 "tarball" text,
40 "published_by" uuid,
41 "yanked" boolean NOT NULL DEFAULT false,
42 "yanked_reason" text,
43 "published_at" timestamp DEFAULT now() NOT NULL,
44 CONSTRAINT "package_versions_pkg_fk" FOREIGN KEY ("package_id") REFERENCES "packages"("id") ON DELETE cascade,
45 CONSTRAINT "package_versions_user_fk" FOREIGN KEY ("published_by") REFERENCES "users"("id") ON DELETE set null
46);
47
48--> statement-breakpoint
49CREATE INDEX IF NOT EXISTS "package_versions_pkg" ON "package_versions" ("package_id");
50--> statement-breakpoint
51CREATE UNIQUE INDEX IF NOT EXISTS "package_versions_pkg_version" ON "package_versions" ("package_id", "version");
52
53--> statement-breakpoint
54CREATE TABLE IF NOT EXISTS "package_tags" (
55 "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
56 "package_id" uuid NOT NULL,
57 "tag" text NOT NULL,
58 "version_id" uuid NOT NULL,
59 "updated_at" timestamp DEFAULT now() NOT NULL,
60 CONSTRAINT "package_tags_pkg_fk" FOREIGN KEY ("package_id") REFERENCES "packages"("id") ON DELETE cascade,
61 CONSTRAINT "package_tags_version_fk" FOREIGN KEY ("version_id") REFERENCES "package_versions"("id") ON DELETE cascade
62);
63
64--> statement-breakpoint
65CREATE UNIQUE INDEX IF NOT EXISTS "package_tags_pkg_tag" ON "package_tags" ("package_id", "tag");