tembo-io / trunk Goto Github PK
View Code? Open in Web Editor NEWPackage manager and registry for Postgres extensions
License: PostgreSQL License
Package manager and registry for Postgres extensions
License: PostgreSQL License
When a user publishes an extension, we should:
From SyncLinear.com | COR-717
Users should be able to request their extension version be removed.
From SyncLinear.com | COR-825
Trunk CLI should use a trunk.toml
file to store extension metadata. This will hold information currently passed as flags. Example:
[extension]
name = "my_extension"
version = "0.0.0"
description = "2021"
documentation = "documentation.my_extension.com"
repository = "github.com/my_extension"
license = "PostgreSQL"
homepage = "my_extension.com"
postgres_version = "15"
architecture = "x86_64"
From SyncLinear.com | COR-838
trunk build
output does not include manifest.json
file. This file is required for trunk install
. Outup file structure should look like:
❯ tar -tvf pgmq-0.2.1.tar.gz
-rw-rw-r-- ian/ian 279 2023-03-17 06:56 manifest.json
-rw-r--r-- ian/ian 2962 2023-03-16 14:25 pgmq--0.2.1.sql
-rwxr-xr-x ian/ian 2275640 2023-03-16 14:25 pgmq.so
-rw-r--r-- ian/ian 159 2023-03-16 14:25 pgmq.control
Set up Slack organization and channel for Trunk related support and community discussion.
From SyncLinear.com | COR-867
Trunk CLI should be configurable via environment variables. Here are some examples from cargo
https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-crates.
From SyncLinear.com | COR-843
Users should be able to search available extensions in the Trunk Registry with a command like trunk search <extension_name>.
From SyncLinear.com | COR-845
Use orange theme to match pgtrunk.io
From SyncLinear.com | COR-781
Returns all extensions in the registry. This is currently listing all files in the S3 bucket. This should instead return information from the registry's database.
From SyncLinear.com | COR-452
From SyncLinear.com | COR-452
Extension owners should have the ability to invite additional owners of the extension via Trunk Registry.
From SyncLinear.com | COR-832
Host the Trunk CLI in additional repositories such as:
apt
homebrew
yum
zypper
AUR
From SyncLinear.com | COR-839
From SyncLinear.com | COR-823
Add blog section used for publishing blog posts related to extensions:
From SyncLinear.com | COR-860
Users should be able to show installed extensions with the Trunk CLI.
From SyncLinear.com | COR-846
❯ trunk build
Building from path .
Detected that we are building a pgrx extension
Detected pgrx version range =0.8.2
Using pgrx version 0.8.2
Building pgrx extension at path .
Step 1/10 : ARG PG_VERSION=15
Step 2/10 : ARG PGRX_VERSION=0.8.2
Step 3/10 : FROM quay.io/coredb/pgrx-builder:pg${PG_VERSION}-pgrx${PGRX_VERSION}
[/home/ian/.cargo/registry/src/github.com-1ecc6299db9ec823/pg-trunk-0.4.7/src/commands/containers.rs:306] &err = DockerStreamError {
error: "unknown: Tag pg15-pgrx0.8.2 was deleted or has expired. To pull, revive via time machine",
}
thread 'main' panicked at 'error occurred: Other error: Docker stream error
Caused by:
Docker stream error', /home/ian/.cargo/registry/src/github.com-1ecc6299db9ec823/pg-trunk-0.4.7/src/main.rs:51:6
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
We need to define a process for building and publishing PGRX-builder images. We need to support the latest version of PGRX in our builder images.
From SyncLinear.com | COR-775
trunk install --list
show list of currently installed packages
Users should be able to test their extensions via Trunk CLI with a command like trunk test
. Initially, tests should cover the following:
trunk install
CREATE EXTENSION CASCADE;
This will help avoid publishing extensions that do not function as expected.
From SyncLinear.com | COR-844
We should be able to view the following at pgtrunk.io:
From SyncLinear.com | COR-863
Implement a system for 'certifying' Postgres extensions. This will likely involve some spike time as we think about what makes an extension 'certified'.
From SyncLinear.com | COR-842
Trunk CLI should perform some sort of validation before publishing. For example, includes all necessary files and metadata.
From SyncLinear.com | COR-834
Create a route that returns version history for a given extension:
/extensions/detail/{extension_name}/
array of versions for a given extension
[
{
"createdAt": "2023-04-20 4:29:18.52241 +00:00:00",
"description": "My incredible extension",
"documentation": null,
"homepage": "coredb.io",
"version": "0.0.2",
"license": "Apache-2.0",
"name": "pgmq",
"owners": [
{
"userId": "user_2PXTvcubP95TyEvTXZJOpzHjdJn",
"userName": "coredb-service-user"
}
],
"repository": "https://github.com/CoreDB-io/coredb",
"updatedAt": "2023-04-20 23:41:39.467896 +00:00:00"
"publisher": "dummy"
},
{
"createdAt": "2023-04-19 4:29:18.52241 +00:00:00",
"description": "My incredible extension",
"documentation": null,
"homepage": "coredb.io",
"version": "0.0.0",
"license": "Apache-2.0",
"name": "pgmq",
"owners": [],
"repository": "https://github.com/CoreDB-io/coredb",
"updatedAt": "2023-04-20 22:41:39.467896 +00:00:00"
"publisher": "dummy"
},
{
"createdAt": "2023-04-18 4:29:18.52241 +00:00:00",
"description": "My incredible extension",
"documentation": null,
"homepage": "coredb.io",
"version": "0.0.0",
"license": "Apache-2.0",
"name": "pgmq",
"owners": [],
"repository": "https://github.com/CoreDB-io/coredb",
"updatedAt": "2023-04-20 21:41:39.467896 +00:00:00"
"publisher": "anotherdummy"
},
]
From SyncLinear.com | COR-772
Research the possibility of hosting a 'build farm' that compiles extensions on behalf of the user.
From SyncLinear.com | COR-840
Trunk CLI should have the ability to update extensions to the latest version in the Trunk Registry.
From SyncLinear.com | COR-835
Trunk CLI should have the ability to uninstall extensions from a Postgres server.
From SyncLinear.com | COR-836
https://www.docs.pgtrunk.io/ should redirect to our GitHub Pages docs site https://coredb-io.github.io/trunk/.
Fix navigation to make it seamless to go back and forth
From SyncLinear.com | TEM-785
Let's instrument cli to track events, so that we can show usage metrics on the web page for each extension
Trunk currently supports building and publishing extensions for Postgres 15. It should support a wider range of Postgres versions.
From SyncLinear.com | COR-826
API for programatic interaction with the extension storage layer
Actions that the UI needs to perform:
Users should be able to show installed extensions with the Trunk CLI.
From SyncLinear.com | COR-846
Include extension size in metadata. This should fill in the missing value for extensions that have already been published.
From SyncLinear.com | COR-756
If an extension version exists, we should not allow users to re-publish the extension.
From SyncLinear.com | COR-676
Add integration tests for publish, download, and all other registry routes.
From SyncLinear.com | COR-831
Extension owners can label their extensions with a configurable set of labels. This might indicate the state of development for the extension. For example, alpha
or beta
.
From SyncLinear.com | COR-883
Extension publications in Trunk Registry should include a download count for users to view.
From SyncLinear.com | COR-830
trunk uninstall <package>
would be a great added feature
When user's sign up, automatically send a 'Welcome!' email. We can use this to determine how users heard about Trunk, what extensions they'd love to see in the registry, etc.
From SyncLinear.com | COR-861
Installing some extensions requires modification to shared_preload_libraries
. Trunk should automatically take care of this step for us when necessary.
From SyncLinear.com | COR-833
We support building extensions for multiple system architectures. We need to specify the build architecture for each extension publication. For example, users should be able to see what architecture an extension version has been built for.
Example from Docker Hub:
From SyncLinear.com | COR-828
For a given extension, users should be able to view a list of published versions. Example:
From SyncLinear.com | COR-681
The goal is to create and design a database used to support a postgreSQL extension directory. Conceptually-speaking, this would be a postgreSQL equivalent to npmjs.org (JavaScript), pypi.org (Python), and crates.io (Rust).
This would be a backend storage, to which source and built binary distributions would be published and indexed.
We currently host Trunk CLI at https://crates.io/crates/pg-trunk. We realize that not all Postgres users are Rust users. For the alpha milestone, we should host Trunk CLI in an apt
repository. We'll eventually host the CLI in additional repositories such as homebrew,
yum
, zypper
, etc.
From SyncLinear.com | COR-672
Trunk CLI should allow for installing multiple extensions in one command. Example:
trunk install pgmq my_extension pg_stat_statements
From SyncLinear.com | COR-837
Investigate the possibility of installing trunk extensions to remote Postgres servers.
From SyncLinear.com | COR-847
Extension pages should be populated with useful information from GitHub, such as:
From SyncLinear.com | COR-865
Extensions published to trunk registry should be categorized. Examples include:
From SyncLinear.com | COR-829
Users should be able to claim ownership of extensions that we've published. We need a way to verify they are the rightful owner.
From SyncLinear.com | COR-866
There is currently no metadata field for 'postgres version' in extension publications. In order to support a wider range of Postgres versions, extension publications need to be tied to a specific version of Postgres.
From SyncLinear.com | COR-827
Implement an extension security scanning tool, similar to what Trivy provides.
From SyncLinear.com | COR-841
Collect metrics from API (based on CLI usage, trunk install pgmq for example)
Improve telemetry and usage metrics collection so we can highlight information like:
From SyncLinear.com | COR-882
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.