Skip to content

swiss/oss-catalog

Repository files navigation

Open Source Software Catalog

The Open Source Software Catalogue provides an overview of free and open-source software developed by or for the Swiss Confederation. It is based on the Public Code standard, which describes software in a machine-readable way, making it discoverable and understandable for both developers and non-technical users.

Context

flowchart TB
  subgraph OSS_CATALOG[OSS Catalog]
    direction LR
    db[(PostgreSQL)]
    api[Developers Italia API]
    crawler[Publiccode Crawler]
    web[OSS Catalog Client]

    api --> db
    crawler -- "Read publishers<br>Create softwares<br>(REST)" --> api
    web <-- Static build<br>(REST) --> api
  end

  user((User))
  github[GitHub, GitLab, others]
  action[Scheduled Github Action]
  swissindex[https://github.com/swiss/index/blob/main/README.md]
  user -- "(HTTP)" --> web
  crawler -- "Scan repositories<br>Parse publiccode.yml" --> github

  swissindex -- Reads publishers --> action
  action -- creates publishers (REST) --> api
  action -- triggers--> crawler

Loading

Usage

Overview

What you will do:

  • Clone this repo
  • Generate PASETO key & create GitHub API token
  • Start API service (and DB)
  • Add publisher(s) using curl
  • Run crawler
  • Build and run the client

Preparation

Clone this repository:

git clone git@github.com:swiss/oss-catalog.git
cd oss-catalog/

The API uses a paseto key for authentication. Generate it with:

./paseto/generate-paseto-key.sh

Create GitHub API Token with the public_repo Permission under https://github.com/settings/tokens and add it to the .env file. The crawler needs this token to access GitHub repositories.

echo "GITHUB_TOKEN=<your access token>" >> .env

Install and enable pnpm (see pnpm docs):

corepack enable pnpm

Note: If you use Node 26+, corepack is not available anymore. You need to install pnpm manually, see https://pnpm.io/installation

API Service

Start API with database:

./start-api

Use API via Curl (optional)

The API uses PASETO for authentication. Generate a PASETO token (valid for 24h):

source .env
cd paseto/go
PASETO_TOKEN="$(go run paseto-generate.go $PASETO_KEY)"

List publishers (no authentication needed):

curl http://localhost:3000/v1/publishers

Create a publisher:

curl -X POST -H "Authorization: Bearer $PASETO_TOKEN" -H "Content-Type: application/json" -d '{"codeHosting": [{"url": "https://github.com/swiss/", "group": true}], "description": "Swiss Government"}' http://localhost:3000/v1/publishers

Crawler

Run crawler - this will crawl all repositories in the API, checks for publiccode.yml and add them to the database if available and valid.

./start-crawler

Catalog Client Application

Start the catalog client application at http://localhost:8080:

./start-client

Or for development mode:

pnpm install
pnpm scope:client dev

Then visit http://localhost:4321

Known Issues

  • The actual deletion of a publisher or software in the database takes a while (as if it is done asynchronously in the API).

Resources

About

Open Source Software Catalog

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors