{"id":24653941,"url":"https://github.com/joshbeard/testing-packaging","last_synced_at":"2026-05-07T18:14:21.317Z","repository":{"id":220460864,"uuid":"751699569","full_name":"joshbeard/testing-packaging","owner":"joshbeard","description":"📦 Proof of concept for building and deploying package artifacts and repos","archived":false,"fork":false,"pushed_at":"2024-02-27T00:35:27.000Z","size":922,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-16T01:48:21.662Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"0bsd","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joshbeard.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-02T06:07:49.000Z","updated_at":"2024-02-28T06:29:51.000Z","dependencies_parsed_at":"2024-02-02T07:26:54.008Z","dependency_job_id":"0a3b37b5-b418-47a0-ac20-ae192007b45e","html_url":"https://github.com/joshbeard/testing-packaging","commit_stats":null,"previous_names":["joshbeard/testing-packaging"],"tags_count":166,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshbeard%2Ftesting-packaging","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshbeard%2Ftesting-packaging/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshbeard%2Ftesting-packaging/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshbeard%2Ftesting-packaging/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joshbeard","download_url":"https://codeload.github.com/joshbeard/testing-packaging/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244717345,"owners_count":20498283,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-25T21:14:32.178Z","updated_at":"2026-05-07T18:14:16.294Z","avatar_url":"https://github.com/joshbeard.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚧 Packaging Proving Ground 🚧\n\nThis repository is to test out building an artifact and\npackaging it in a variety of formats, while also providing native package\nrepositories.\n\nThis project is developed around shipping a compiled Go binary and uses\n[GoReleaser](https://goreleaser.com/) to produce the artifacts. The\nfunctionality beyond the package creation should be fairly generic. I intend to\ncreate a separate project with the same goals but building artifacts more\ngenerically (without GoReleaser) instead.\n\nAll of this is an effort to better understand the packaging and distribution of\nsoftware in popular package repositories and formats.\n\n## Overview\n\n* Binary in `.tar.gz` and `.zip` archives for each platform\n* RPM, DEB, AUR, PKGBUILD, APK, Homebrew packages\n* Package repositories with browseable indexes\n* GPG-signed artifacts\n* Repo GPG support\n\n## Goals\n\n* Monorepo\n    * I'm not opposed to separating things and think it might be necessary for\n      certain things, or at least simpler and easier to deal with. However, I'd\n      like to \"prove out\" a monolithic repository for managing the distribution\n      alongside the source code.\n* Re-usable\n    * The methods and tools should be as re-usable as possible, given their\n      intentional design choices. Minimal adaptation should be required to port\n      this project's resources to another project.\n* Avoid CI-specifics\n    * This project should be able to produce the packages and repository\n      structure locally as much as possible.\n* Follow standards\n    * Each package should follow the standards and conventions for that\n      particular package and repository type. E.g. naming conventions,\n      repository structure.\n\n## Tools\n\n* [GoReleaser](https://goreleaser.com/) does most of the work - compiles the\n  binary, packages it (including distro packages), signs it, and does some of\n  the publishing (Docker, GitHub releases).\n* [web-indexer](https://github.com/joshbeard/web-indexer) is used to generate\n  index pages for the web repo.\n\n## Usage\n\nThe [`build.sh`](build.sh) script drives this thing. I started with a\n`Makefile`, but shell was more readable and cleaner. I'm using this for local\ndevelopment and in the GitHub pipeline.\n\nTo build all the packages, generate repositories, and stage things under\n`dist/staging/`, run the following:\n\n```shell\n./build.sh snapshot\n```\n\nTo do a \"production\" release (the [`CI job`](.github/workflows/ci.yml) runs\nthis).\n\n```shell\n./build.sh release\n```\n\n## Installing the Packages\n\nThis sections describes how to install the packages that this repository\nproduces.\n\n### RPM Packages\n\nYou can download the `.rpm` files directly from the\n[GitHub Releases](https://github.com/joshbeard/testing-packaging/releases),\n\u003chttps://get.jbeard.dev/rpm\u003e, or add the repository (recommended):\n\nAdd this to `/etc/yum.repos.d/jbeard.repo`:\n\n```plain\n[helloworld]\nname=Hello World\nbaseurl=https://get.jbeard.dev/rpm/$basearch\nenabled=1\ngpgcheck=1\ngpgkey=https://get.jbeard.dev/gpg-pubkey.asc\n```\n\n```shell\ndnf install hello-world\n```\n\n### DEB Packages\n\nYou can download the `.deb` files directly from the\n[GitHub Releases](https://github.com/joshbeard/testing-packaging/releases),\n\u003chttps://get.jbeard.dev/deb/pool/main\u003e, or add the repository (recommended):\n\n__Add GPG Key__\n\n```shell\nwget -qO- https://get.jbeard.dev/gpg-pubkey.asc | gpg --dearmor \u003e jbeard-repo-keyring.gpg\ncat jbeard-repo-keyring.gpg | sudo tee /etc/apt/keyrings/jbeard-repo-keyring.gpg \u003e /dev/null\n```\n\n__Add Repository__\n\n```shell\necho \"deb [arch=amd64 signed-by=/etc/apt/keyrings/jbeard-repo-keyring.gpg] https://get.jbeard.dev/deb stable main\" |\u003e \\\n    sudo tee /etc/apt/sources.list.d/jbeard.list\n```\n\n__Update APT sources and Install__\n\n```shell\nsudo apt update\nsudo apt install hello-world\n```\n\n### Arch Linux\n\n#### Arch Linux Repository\n\nAdd the package repository:\n\n```shell\necho -e '\\n[hello-world]\\nSigLevel = Optional TrustAll\\nServer = https://get.jbeard.dev/archlinux/$arch' \u003e\u003e /etc/pacman.conf\n```\n\nInstall the package:\n\n```shell\npacman -Sy hello-world\n```\n\n#### Arch Linux PKGBUILD\n\nThe `PKGBUILD` is for installing the binary.\n\nDownload the build files:\n\n```shell\ncurl -L https://get.jbeard.dev/aur/hello-world-bin.pkgbuild -o PKGBUILD\ncurl -L https://get.jbeard.dev/aur/hello-world-bin.srcinfo -o .SRCINFO\n```\n\nBuild and install:\n\n```shell\nmakepkg -si --noconfirm\n```\n\n### Homebrew\n\n```shell\nbrew install joshbeard/hello-world/hello-world\n```\n\n### Install Script\n\n```shell\ncurl -sfL https://get.jbeard.dev/install.sh | sh -\n```\n\nThe install script installs the binary to `~/.local/bin` by default.\n\nSet an `INSTALL_DIR` environment variable to override.\n\n```shell\ncurl -sfL https://get.jbeard.dev/install.sh | INSTALL_DIR=/path/to/dir sh -\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoshbeard%2Ftesting-packaging","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoshbeard%2Ftesting-packaging","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoshbeard%2Ftesting-packaging/lists"}