Skip to content

Commit

Permalink
feat(pkglist): add page containing the current package list
Browse files Browse the repository at this point in the history
  • Loading branch information
dr460nf1r3 committed Jun 30, 2024
1 parent f84d0b7 commit 51703f2
Show file tree
Hide file tree
Showing 18 changed files with 9,013 additions and 7,768 deletions.
6 changes: 4 additions & 2 deletions backend/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@ import { Module } from "@nestjs/common"
import { ConfigModule } from "@nestjs/config"
import { MetricsController } from "./metrics/metrics.controller"
import { MetricsService } from "./metrics/metrics.service"
import { MiscController } from "./misc/misc.controller"
import { MiscService } from "./misc/misc.service"
import { TelegramController } from "./telegram/telegram.controller"
import { TelegramService } from "./telegram/telegram.service"

@Module({
imports: [ConfigModule.forRoot({ envFilePath: ".env" }), CacheModule.register()],
controllers: [TelegramController, MetricsController],
providers: [TelegramService, MetricsService],
controllers: [TelegramController, MetricsController, MiscController],
providers: [TelegramService, MetricsService, MiscService],
})
export class AppModule {}
15 changes: 15 additions & 0 deletions backend/src/misc/misc.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { PkgListRetObject } from "@./shared-lib"
import { CacheInterceptor } from "@nestjs/cache-manager"
import { Controller, Get, UseInterceptors } from "@nestjs/common"
import { MiscService } from "./misc.service"

@Controller("misc")
@UseInterceptors(CacheInterceptor)
export class MiscController {
constructor(private miscService: MiscService) {}

@Get("pkglist")
getPkgList(): Promise<PkgListRetObject> {
return this.miscService.getPkgList()
}
}
11 changes: 11 additions & 0 deletions backend/src/misc/misc.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { Module } from "@nestjs/common"
import { MiscController } from "./misc.controller"
import { MiscService } from "./misc.service"

@Module({
controllers: [MiscController],
providers: [MiscService],
})
export class MiscModule {
constructor() {}
}
19 changes: 19 additions & 0 deletions backend/src/misc/misc.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { CAUR_PKG_LIST_URL, PkgListRetObject } from "@./shared-lib"
import { Injectable } from "@nestjs/common"
import { Axios } from "axios"

@Injectable()
export class MiscService {
/**
* Return the list of packages from Chaotic-AUR, mainly just for CORS proxying and caching.
*/
async getPkgList(): Promise<PkgListRetObject> {
const axios = new Axios({
baseURL: "",
timeout: 1000,
})
return axios.get(CAUR_PKG_LIST_URL).then((response): PkgListRetObject => {
return { pkglist: response.data }
})
}
}
7 changes: 7 additions & 0 deletions backend/src/misc/misc.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { MiscModule } from "./misc.module"

describe("Metrics", () => {
it("should be defined", () => {
expect(new MiscModule()).toBeDefined()
})
})
2 changes: 1 addition & 1 deletion backend/src/telegram/telegram.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { TelegramModule } from "./telegram.module"

describe("Metrics", () => {
describe("Telegram", () => {
it("should be defined", () => {
expect(new TelegramModule()).toBeDefined()
})
Expand Down
24 changes: 17 additions & 7 deletions frontend/src/app/app.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
<span class="self-center whitespace-nowrap text-2xl font-semibold text-mauve">Chaotic-AUR</span>
</a>
<button
class="inline-flex h-10 w-10 items-center justify-center rounded-lg p-2 text-sm text-mauve focus:outline-none focus:ring-2 focus:ring-teal md:hidden"
aria-controls="navbar-default"
aria-expanded="false"
class="inline-flex h-10 w-10 items-center justify-center rounded-lg p-2 text-sm text-mauve focus:outline-none focus:ring-2 focus:ring-teal md:hidden"
data-collapse-toggle="navbar-default"
type="button"
>
<svg
class="h-5 w-5"
aria-hidden="true"
class="h-5 w-5"
fill="none"
viewBox="0 0 17 14"
xmlns="http://www.w3.org/2000/svg"
Expand All @@ -33,9 +33,9 @@
>
<li>
<a
class="md block rounded px-3 py-2 text-mauve hover:bg-red hover:text-crust md:border-0 md:p-0 md:hover:bg-transparent md:hover:text-maroon"
aria-current="page"
ariaCurrentWhenActive="page"
class="md block rounded px-3 py-2 text-mauve hover:bg-red hover:text-crust md:border-0 md:p-0 md:hover:bg-transparent md:hover:text-maroon"
routerLink=""
routerLinkActive="active"
>
Expand All @@ -44,8 +44,8 @@
</li>
<li>
<a
class="block rounded px-3 py-2 text-mauve hover:bg-red hover:text-crust md:border-0 md:p-0 md:hover:bg-transparent md:hover:text-maroon"
ariaCurrentWhenActive="page"
class="block rounded px-3 py-2 text-mauve hover:bg-red hover:text-crust md:border-0 md:p-0 md:hover:bg-transparent md:hover:text-maroon"
routerLink="docs"
routerLinkActive="active"
>
Expand All @@ -54,8 +54,8 @@
</li>
<li>
<a
class="block rounded px-3 py-2 text-mauve hover:bg-red hover:text-crust md:border-0 md:p-0 md:hover:bg-transparent md:hover:text-maroon"
ariaCurrentWhenActive="page"
class="block rounded px-3 py-2 text-mauve hover:bg-red hover:text-crust md:border-0 md:p-0 md:hover:bg-transparent md:hover:text-maroon"
routerLink="status"
routerLinkActive="active"
>
Expand All @@ -64,8 +64,18 @@
</li>
<li>
<a
ariaCurrentWhenActive="page"
class="block rounded px-3 py-2 text-mauve hover:bg-red hover:text-crust md:border-0 md:p-0 md:hover:bg-transparent md:hover:text-maroon"
routerLink="package-list"
routerLinkActive="active"
>
Package List
</a>
</li>
<li>
<a
ariaCurrentWhenActive="page"
class="block rounded px-3 py-2 text-mauve hover:bg-red hover:text-crust md:border-0 md:p-0 md:hover:bg-transparent md:hover:text-maroon"
routerLink="stats"
routerLinkActive="active"
>
Expand All @@ -74,8 +84,8 @@
</li>
<li>
<a
class="block rounded px-3 py-2 text-mauve hover:bg-red hover:text-crust md:border-0 md:p-0 md:hover:bg-transparent md:hover:text-maroon"
ariaCurrentWhenActive="page"
class="block rounded px-3 py-2 text-mauve hover:bg-red hover:text-crust md:border-0 md:p-0 md:hover:bg-transparent md:hover:text-maroon"
routerLink="memorial"
routerLinkActive="active"
>
Expand All @@ -84,8 +94,8 @@
</li>
<li>
<a
class="block rounded px-3 py-2 text-mauve hover:bg-red hover:text-crust md:border-0 md:p-0 md:hover:bg-transparent md:hover:text-maroon"
ariaCurrentWhenActive="page"
class="block rounded px-3 py-2 text-mauve hover:bg-red hover:text-crust md:border-0 md:p-0 md:hover:bg-transparent md:hover:text-maroon"
routerLink="about"
routerLinkActive="active"
>
Expand Down
6 changes: 6 additions & 0 deletions frontend/src/app/app.routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { DocsComponent } from "./docs/docs.component"
import { HomeComponent } from "./home/home.component"
import { MemorialComponent } from "./memorial/memorial.component"
import { NotFoundComponent } from "./not-found/not-found.component"
import { PackageListComponent } from "./package-list/package-list.component"
import { StatsPage } from "./stats-page/stats-page"
import { StatusComponent } from "./status/status.component"

Expand Down Expand Up @@ -45,6 +46,11 @@ export const routes: Routes = [
path: "stats",
component: StatsPage,
},
{
title: "Package List",
path: "package-list",
component: PackageListComponent,
},
{
title: "Not Found",
path: "not-found",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
DeploymentType,
getDeployments,
parseDeployments,
startShortPolling
startShortPolling,
} from "@./shared-lib"
import { AfterViewInit, Component } from "@angular/core"
import { FormsModule } from "@angular/forms"
Expand Down
Empty file.
30 changes: 30 additions & 0 deletions frontend/src/app/package-list/package-list.component.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<div class="chaotic-container-regular">
<div class="chaotic-container-regular">
<h1 class="text-center text-4xl font-extrabold text-maroon">Package List</h1>
<p class="my-4 px-10 text-center text-lg text-text">
This package shows all packages currently deployed in Chaotic-AUR and their corresponding package names.
</p>
<p class="my-4 px-10 text-center text-lg text-text">
Total packages: <a class="text-red">{{ packageList.length }}</a>
</p>

<ol class="relative pt-2.5">
<li class="mb-10">
@for (deployment of packageList; track deployment) {
<li>
<div
class="items-center justify-between rounded-lg border border-mauve bg-surface0 p-4 shadow-sm sm:flex"
>
<div class="lex text-sm font-bold text-maroon">
<a>{{ deployment.name }}</a>
</div>
<a class="mb-1 text-xs font-normal text-text sm:order-last sm:mb-0">
{{ deployment.fullString }}
</a>
</div>
</li>
}
</li>
</ol>
</div>
</div>
21 changes: 21 additions & 0 deletions frontend/src/app/package-list/package-list.component.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { ComponentFixture, TestBed } from "@angular/core/testing"
import { PackageListComponent } from "./package-list.component"

describe("PackageListComponent", () => {
let component: PackageListComponent
let fixture: ComponentFixture<PackageListComponent>

beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [PackageListComponent],
}).compileComponents()

fixture = TestBed.createComponent(PackageListComponent)
component = fixture.componentInstance
fixture.detectChanges()
})

it("should create", () => {
expect(component).toBeTruthy()
})
})
54 changes: 54 additions & 0 deletions frontend/src/app/package-list/package-list.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import { CAUR_BACKEND_URL, PkgList } from "@./shared-lib"
import { CommonModule } from "@angular/common"
import { HttpClient } from "@angular/common/http"
import { Component } from "@angular/core"
import { ReactiveFormsModule } from "@angular/forms"

@Component({
selector: "app-package-list",
standalone: true,
imports: [CommonModule, ReactiveFormsModule],
templateUrl: "./package-list.component.html",
styleUrl: "./package-list.component.css",
})
export class PackageListComponent {
packageList: any[] = []

constructor(private httpClient: HttpClient) {
this.getPkgList()
}

/**
* Parse the package list from the CAUR_PKG_LIST_URL. The file parsed is dumped with
* each database add event by the builder and is always up-to-date therefore.
* We could probably make this an API call to the backend to get the list, but since we
* already have the list, we can just do it like that.
* I Might change this in the future if we want to show more / different information.
* @param pkgList
*/
parsePkgList = (pkgList: string): PkgList => {
const pkgArray: PkgList = []

pkgList.split(/\n/g).forEach((pkg: string): void => {
if (pkg === "" || pkg.includes("pkg.tar.zst.sig")) return

// At the time of writing this, the following regex reliably caught the package name
// this *might* change in the future depending on whether out of norm packages are added.
const pkgname = pkg.split(/(-|-r|.r|-v)[0-9]/, 1)[0]

pkgArray.push({
name: pkgname,
fullString: pkg,
})
})

return pkgArray
}

getPkgList = (): void => {
this.httpClient.get(`${CAUR_BACKEND_URL}/misc/pkglist`).subscribe((res): void => {
// @ts-ignore
this.packageList = this.parsePkgList(res.pkglist)
})
}
}
3 changes: 3 additions & 0 deletions nx.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@
"linter": "eslint",
"style": "css",
"unitTestRunner": "jest"
},
"@nx/angular:component": {
"style": "css"
}
},
"plugins": [
Expand Down
Loading

0 comments on commit 51703f2

Please sign in to comment.