Repository navigation
v0.2.0 - #3
Merged
Merged
v0.2.0#3
Conversation
- the same commit builds the same image digest (the same image, byte for byte) - the created date is now the commit date
- .recover, .dbinfo and the sqlite_dbpage and sqlite_stmt virtual tables
- run the upstream check twice per day - add a concurrency group, cache-mode none and a job name - set bash as the default shell so a failing command in a pipe fails the step - improve the pull request title and description - label the pull request with the bot/upstream label - run the tests on the branch of the pull request - close open pull requests for older versions when a new one is opened
- add reproducible builds, PIE and detached runs to comparison.md - change the SQLite version row to SQLite updates, which now says how each image gets a new release
- say where to report a vulnerability in SQLite, BusyBox or tini - update the example tags to 3.54.1-v0.2.0
- show the amd64 image size in the size badge and switch tests to the release workflow - describe the image as a central home for SQLite databases in the introduction - update what makes this image different - explain that the application still talks to the database through its own SQLite engine, version and extensions, and what this image does next to it - drop the uid 65532 note and the user line from the Compose example - add a section on copying the static sqlite3 shell into other images - update the example tags to 3.54.1-v0.2.0 and add the preview tag
- bump stable.image or preview.image in release.json instead of IMAGE_VERSION in the Dockerfile - release from main, next, release and maintenance branches - allow prereleases with an alpha, beta or rc stage - offer the versions the branch allows and preselect the bump the commits need - skip a version another branch released and warn about one a release branch holds - date the CHANGELOG.md entries only for a stable release
- split the build, test and release workflows - release on a push that changes release.json or src/upstream.json - select the releases with scripts/version.sh from release.json and src/upstream.json - build and test every upstream line for every platform - publish the tested images instead of a second build - publish the prereleases of next and the release branches as GitHub prereleases - take the notes of a first release from CHANGELOG.md and publish it right away, not as a draft - move the tags scripts/version.sh names on both registries and mark the GitHub release of latest - read the Docker Hub credentials only in jobs of the release environment - queue release runs instead of cancelling them, so no run is lost and no two runs move tags at once - run without the GitHub Actions cache, so no run restores a cache another run poisoned - run every step with bash, so a failing command in a pipe fails the step - merge forward after a release
- zstd is faster, more modern and compresses better than gzip, pulling needs Docker Engine 23.0 or later
- a scratch image has no package database, sbom.sh writes a syft JSON document into /var/lib/db/sbom for the scanner - a build without IMAGE_VERSION stops in the build stage
- it runs privileged and installs QEMU of every emulated build
- without --chmod the image takes the modes of the checkout, which follow the umask of whoever cloned it, so a checkout with umask 000 makes /usr/local/bin writable for every user
- the pull request workflow now calls the build workflow, which no longer runs on pull_request - a pull request from a fork is built but not published
- ghcr.io reads the description and the license of an image of several platforms from the annotations of its index, not from the labels of each image
- the pull request workflow leaves the images of every closed pull request behind on ghcr.io
- docker_hub is undefined for a manifest ghcr.io has, as a HEAD on docker.io for every one of them could trigger rate limits
- ghcr.io lists deleted versions for 30 days, a HEAD on docker.io for each would reach thousands per run, which could trigger rate limits - twice the count covers the last two runs, and manifests only docker.io has sort first, so a copy docker.io refused is deleted within two runs
- reads the layouts the build workflow built, so no second build is needed to get the pull request image sizes
- only the commits that bump the image or the SQLite version stay ignored, so a feat change to the release process asks for a minor
- next gets one merge per release, named after its tag, and no merge of main commits that are not released yet
- a push that changes release.json or src/upstream.json stays unbuilt as the release workflow builds it
Contributor
Image size
Compressed is what |
peaklabs-dev
marked this pull request as ready for review
October 30, 2026 16:19
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Breaking Changes
Security
/usr,/usr/localor/usr/local/binwritable for every user.README.mdthat a bind mount opens the databases to every user on the host who can reach the directory, and show how to close it3.54.1-v0.2.0on Docker Hub by using the ag mutability setting on docker hub with a strict patter.main,next, release and maintenance branches by using branch protection rules on GitHubreleaseenvironment, which only the branches that release can use, with a token that can push but not deletecleanupenvironment, which onlymaincan use and a maintainer approves for every run.github/workflows/actions.lock, name actions by their release tag, and fail the lint job when the lockfile is stalepull_request_target,workflow_runand comment events start no runAdded
.recoverand.dbinfo, thesqlite_dbpageandsqlite_stmtvirtual tables, thesqlite_offset()function, comments inEXPLAINoutput andEXPLAINof statements that call functions the shell does not knowcreateddate of the image and itsorg.opencontainers.image.createdlabel are the date of that commitnextand the release branches, tagged like3.54.1-v0.2.0-beta.1, and the movingpreviewtag3.53next to the newest, built with the same image version and tagged like3.53.4-v0.2.0,3.53.4and3.53linux/arm/v6,linux/ppc64le,linux/s390xandlinux/386, eight platforms in totalghcr.io/peakimages/sqlite:pr-<number>, so a change can be tried before it is mergedChanged
/var/lib/sqliteis0777and the entrypoint creates databases with mode0666, which their-waland-shmfiles take, so the application can run as any user and not only as65532or rootRELEASE.mddescribes itrelease.json,stable.imageformainand the maintenance branches andpreview.imagefornextand the release branchessrc/upstream.json, one entry per line, instead ofsrc/version.jsonmain,next, release branches such asrelease/v0.3and maintenance branches such asv1.xandv0.1.xscripts/release.sh, which offers the versions the branch allows and preselects the bump the commits needrelease.jsonsets0.0.0, the version a new repository starts with,scripts/release.shoffers0.1.0or1.0.0as its first releasescripts/plan-version.sh, which also reports what a push publishesrelease.jsonorsrc/upstream.jsonnames and whose tag does not exist yet, never as a draftlatest,previewand every prefix of a SQLite version to their place among all published tags, so a release of an older line never moves a tag backmain, the maintenance branches and the major release branches twice a day and open one pull request per bump, which supersedes the older onesmainforward intonextand the release branches after every releasev,v3.54.1-v0.2.0, the image tags stay3.54.1-v0.2.0, and rename the tags and releases of the earlier versions to matchCHANGELOG.md, later releases name the SQLite updatelatestpoints at as the latest releaseSQLITE_UIDandSQLITE_GIDbuild arguments, the user is65532:65532BUILD_DATEtoCREATED, addSOURCE_DATE_EPOCHand requireIMAGE_VERSIONFixed
/var/lib/db/sbomthat takes the place of the package database a scratch image lacksLICENSEto the AGPL-3.0 text on gnu.orgRefactored
finalMaintenance
scripts/clean-manifests.shand a monthly workflow that delete the manifests no tag needs from ghcr.io and docker.io, such as the untagged images the old release workflow left behind and the images of closed pull requests, and keep every release and every image a tag points atscripts/size.shto measure the compressed and the on-disk size of every platform, and comment the size change of every pull request compared with the latest releasescripts/build.shto build the image locally with the image version CI builds with, for the platform of the Docker host or the platformsPLATFORMnamesscripts/lint.shand stop at the first failed checkactions/download-artifactto v8.0.2,actions/upload-artifactto v7.0.2 anddocker/login-actionto v4.7.0RELEASE.mdREADME.mdas a central home for SQLite databases, explain that the application keeps its own SQLite engine, add copying the staticsqlite3shell into other images and drop the uid65532notedocs/comparison.mdand explain the UPX packing ofgrepular/sqlite3SECURITY.md