Skip to content

Releases: TechIdiots-LLC/tippr

tippr v0.28.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 03:05

✨ Features and improvements

🐞 Bug fixes

Downloads

  • Docker: docker pull techidiotsllc/tippr:0.28.0, or unpack tippr-0.28.0-compose.tar.gz, copy
    .env.example to .env, fill it in and run docker compose up -d (docker/README.md).
  • Proxmox: tippr-0.28.0-proxmox-amd64.tar.zst is an LXC template with the whole site installed;
    create a container with the site's domain as its hostname and start it (docs/PROXMOX.md).
  • Installer (Ubuntu 24.04): unpack tippr-0.28.0-installer.tar.gz into /home/tippr/src and
    run sudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.sh in tippr/; it doesn't need
    to clone anything (docs/INSTALL_tippr.md).

SHA256SUMS lists the files' checksums.

tippr v0.26.0

Choose a tag to compare

@github-actions github-actions released this 27 Oct 01:11
25750cb

✨ Features and improvements

  • Paste is no longer used: the error pages, static files and per-request objects (c, g, request) it
    provided are tippr's own now (r2/config/middleware.py, pylons/); PasteDeploy, which reads the ini, stays.
    Updating a server, from /admin/servers or with the installer, uninstalls Paste.
  • About 30 fewer Python packages: baseplate no longer needs formenergy-observability, which brought in Dagster (a
    data pipeline framework) and capped packaging below 25; the two tracing helpers it used are in baseplate now.
    Updating a server uninstalls them, and packaging is current (26.3).
  • Current Python packages: OpenTelemetry 1.45 (was 1.28), protobuf 7, Pillow 13, wrapt 2, grpcio 1.85, pytest 9,
    and python-json-logger 4 and pyrate-limiter 4 through tippr's baseplate (which now needs Python 3.10 or newer);
    the rest are at their newest too. python-dateutil stays at 2.9, as botocore needs. importlib_metadata and zipp,
    which nothing needs any more, are uninstalled on update, and so is Whoosh, a search library nothing used.
  • A check that a server's tippr is up: scripts/smoke_check.sh checks the services the server runs, a few pages
    (the front page, login, the API, an error page, a POST) and the web app's log, and says what failed. The
    installer's CI runs it after installing, so an install that finishes with a broken site fails.
  • Package updates from Dependabot: weekly pull requests for newer Python packages and GitHub Actions, with
    packages that move together (OpenTelemetry, boto3 and botocore, grpcio and protobuf) in one. CI installs the exact
    pins as a release would and tests them, and patch updates that pass are merged automatically, once master's
    ruleset requires the checks (.github/workflows/dependabot-automerge.yml).

🐞 Bug fixes

  • Domain listings (/domain/example.com) redirected to a broken address: every one went to
    /domain/b'example.com'/ instead of listing the domain's posts. They list them again, and an international domain
    name still goes to its xn-- form.
  • Uploading an app's icon (/prefs/apps) gave an error: the resized icon was written as text, which Python 3
    refuses, so no app could have an icon. It's saved as a PNG again.
  • "Exclude custom vaults" (/me/f/all) gave "you broke tippr" to gold members: its sidebar asked for the
    filtered vaults by their name from before vaults were renamed. It lists them again, to add to or remove.
  • Filtering a vault out of /all didn't take effect for a minute, and could show someone else's filter: the
    spread-out /v/all hot list was cached by the page's address, which is /me/f/all for every member. It's cached by
    the vaults left out now.
  • Top and controversial listings never updated when tippr runs as a user other than tippr: the database
    password file named the Linux user instead of the database's, so the job that computes them couldn't connect and
    failed every 15 minutes. Updating rewrites the file.

Downloads

  • Docker: docker pull techidiotsllc/tippr:0.26.0, or unpack tippr-0.26.0-compose.tar.gz, copy
    .env.example to .env, fill it in and run docker compose up -d (docker/README.md).
  • Proxmox: tippr-0.26.0-proxmox-amd64.tar.zst is an LXC template with the whole site installed;
    create a container with the site's domain as its hostname and start it (docs/PROXMOX.md).
  • Installer (Ubuntu 24.04): unpack tippr-0.26.0-installer.tar.gz into /home/tippr/src and
    run sudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.sh in tippr/; it doesn't need
    to clone anything (docs/INSTALL_tippr.md).

SHA256SUMS lists the files' checksums.

tippr v0.25.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 19:11
d8e8aed

✨ Features and improvements

  • One panel at a time under a post or comment: share, scales and report opened one under another; opening one
    now closes the others there (clicking the same link again still closes its own).
  • Gold on /admin/users, including permanent gold: an account's page shows its gold (until a date, permanent, or
    none) and lets an admin give or take months (up to 120 at once), make it permanent, or remove it (with a reason,
    after ticking to confirm), each recorded under the account's admin actions. Permanent gold doesn't run out: the
    daily expiry job and refunds leave it, and members' profiles and /api/me show it with no end date. The old
    /admin/gold form, which only added or took months, now goes to /admin/users.

🐞 Bug fixes

  • The API documentation by OAuth scope (/dev/api/oauth) gave an error: endpoints any OAuth client may use are
    listed under "any" scope, which Python 3 couldn't sort with the scope names. It lists them first, as "any", again.

Downloads

  • Docker: docker pull techidiotsllc/tippr:0.25.0, or unpack tippr-0.25.0-compose.tar.gz, copy
    .env.example to .env, fill it in and run docker compose up -d (docker/README.md).
  • Proxmox: tippr-0.25.0-proxmox-amd64.tar.zst is an LXC template with the whole site installed;
    create a container with the site's domain as its hostname and start it (docs/PROXMOX.md).
  • Installer (Ubuntu 24.04): unpack tippr-0.25.0-installer.tar.gz into /home/tippr/src and
    run sudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.sh in tippr/; it doesn't need
    to clone anything (docs/INSTALL_tippr.md).

SHA256SUMS lists the files' checksums.

tippr v0.24.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 12:54

✨ Features and improvements

  • Current setuptools, without pkg_resources: setuptools 81 deprecated pkg_resources and later versions remove it,
    and tippr was held below 81 by what still imported it: tippr's baseplate (now importlib.metadata), OpenTelemetry's
    instrumentation before 0.49 (now 1.28.2 / 0.49b2, which needs protobuf 5), the test setup's PasteScript import, and
    Pyramid 2.1, which only the activity service's HTTP gateway uses and tippr never runs (it's an optional extra of the
    activity service now). The installer's package check uses importlib.metadata (scripts/check_requirements.py),
    and the pins in the installer, Docker image, builds and CI are gone. Packages a release no longer uses are listed
    in install/requirements-retired.txt, and the installer, and so an update from /admin/servers, removes them: this
    one removes PasteScript, Pyramid and what came with it.
  • Account activity lists where your account is used from: it only recorded logins, and a login cookie lasts for
    months, so the page was usually empty. Visits are recorded too now, at most once an hour for each address, kept 100
    days as before. A visit from a private network address (a home or office network reaching the site directly) isn't
    kept, and the page now says so instead of showing an empty table; an empty list says when visits will appear. The
    privacy policy's information list names this (account activity, 100 days, seen by you and the site's
    administrators, private addresses not kept), and the "accessing tippr from" line names no site.
  • /v/all mixes vaults: it ranks every post together, so a feed's run of new posts in one vault filled it (the
    front page and multis mix vaults already). Its hot listing now never puts two posts from the same vault next to
    each other while another vault's post is within 30 places.

🐞 Bug fixes

Downloads

  • Docker: docker pull techidiotsllc/tippr:0.24.0, or unpack tippr-0.24.0-compose.tar.gz, copy
    .env.example to .env, fill it in and run docker compose up -d (docker/README.md).
  • Proxmox: tippr-0.24.0-proxmox-amd64.tar.zst is an LXC template with the whole site installed;
    create a container with the site's domain as its hostname and start it (docs/PROXMOX.md).
  • Installer (Ubuntu 24.04): unpack tippr-0.24.0-installer.tar.gz into /home/tippr/src and
    run sudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.sh in tippr/; it doesn't need
    to clone anything (docs/INSTALL_tippr.md).

SHA256SUMS lists the files' checksums.

tippr v0.23.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 01:36
3e385d8

✨ Features and improvements

🐞 Bug fixes

Downloads

  • Docker: docker pull techidiotsllc/tippr:0.23.0, or unpack tippr-0.23.0-compose.tar.gz, copy
    .env.example to .env, fill it in and run docker compose up -d (docker/README.md).
  • Proxmox: tippr-0.23.0-proxmox-amd64.tar.zst is an LXC template with the whole site installed;
    create a container with the site's domain as its hostname and start it (docs/PROXMOX.md).
  • Installer (Ubuntu 24.04): unpack tippr-0.23.0-installer.tar.gz into /home/tippr/src and
    run sudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.sh in tippr/; it doesn't need
    to clone anything (docs/INSTALL_tippr.md).

SHA256SUMS lists the files' checksums.

tippr v0.22.0

Choose a tag to compare

@github-actions github-actions released this 25 Oct 18:14

✨ Features and improvements

  • A site can be split over several servers: the installer's TIPPR_ROLE makes a server the backend
    (PostgreSQL, Cassandra, RabbitMQ, ZooKeeper, OpenSearch, memcached, the "here now" counts, the queue processors
    and the scheduled jobs) or a frontend (the pages and live comments), any number of which, on any servers,
    share one backend behind a load balancer. all, one server doing everything, stays the default. The backend
    opens its services to the frontends' address range and writes /etc/tippr/cluster.env, the passwords, signing
    secrets and shared settings a frontend installs from; the Proxmox template makes either from firstboot.env.
    Media has to be in object storage. /admin/servers shows each server's role and leaves out the services it
    doesn't run, and updating a backend checks its app and database rather than its (absent) pages. See
    docs/SERVERS.md.
  • Members' data exports are kept in PostgreSQL: rather than on the disk of the server whose queue processor
    made them, so on a split site any frontend gives a member theirs, and old ones are cleared (the files on disk
    never were). Exports made before still download.
  • /admin/backups works on a split site: on a frontend its requests go through ZooKeeper to the backend's
    tippr-backup, and it shows the backend's backups and progress, passed both ways every 10 seconds by
    tippr-backup-relay.timer on the backend. Another server copying a split site's backups with a transfer key
    can't go through a frontend (the files are on the backend), so the page says to copy the folder instead.
  • Preferences unlock once, like admin mode: with two-factor on, preferences ask for the code (or a passkey) when
    you open them, rather than on each form: the security page and the password and email page always, and every
    preferences page (options, privacy, friends, blocked, apps) when you choose "also ask for a code before opening
    any of your preferences" on the security page, which replaces asking on each save. Once unlocked their forms need
    no code, and they stay unlocked while you use them, locking again 15 minutes after you last open one; a form saved
    after that says to reload the page and unlock them again. Turning two-factor off and deleting your account still
    ask for a code then.
  • New report reasons, following the content policy: spam or vote manipulation, harassment or threats, hateful
    content, someone's personal information, sexual content involving minors, other illegal content, impersonation,
    malware, phishing or scams, breaking the site's rules (named for the site, rather than "breaking tippr"), and
    other. A vault with its own rules lists those first and the site's in a menu, as before. Each reason is kept in
    English on the report and shown to moderators in their own language; reports made before keep their wording.
    Reporting from a vault's rules page no longer fails.

🐞 Bug fixes

  • The report form was hard to read in night mode: its box stayed light yellow under night mode's light text. It
    now uses night mode's dark notice colours, as does the list of reasons on a reported post.
  • A post or comment a moderator had reported broke the page for its moderators: the reports queue and the
    vault's listings gave an error while showing who reported it and why. They show the moderators' reports again.
  • Deleting an account on /admin/users gave "forbidden": the form's "delete for good" checkbox is named confirm,
    which inside the form's own submit handler hid the browser's confirm(), so its "are you sure?" threw an error
    and the browser sent the form as a plain page instead, which the site refused. It asks and deletes again. The
    other admin forms that ask first (forgetting a server, updating, flushing the cache, payments) use the same
    safer call, and the two that put translated text straight into their script (deleting an account, forgetting a
    server) no longer break on a translation with an apostrophe.

Downloads

  • Docker: docker pull techidiotsllc/tippr:0.22.0, or unpack tippr-0.22.0-compose.tar.gz, copy
    .env.example to .env, fill it in and run docker compose up -d (docker/README.md).
  • Proxmox: tippr-0.22.0-proxmox-amd64.tar.zst is an LXC template with the whole site installed;
    create a container with the site's domain as its hostname and start it (docs/PROXMOX.md).
  • Installer (Ubuntu 24.04): unpack tippr-0.22.0-installer.tar.gz into /home/tippr/src and
    run sudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.sh in tippr/; it doesn't need
    to clone anything (docs/INSTALL_tippr.md).

SHA256SUMS lists the files' checksums.

tippr v0.21.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 18:25

✨ Features and improvements

  • A browser test in the release workflow: after the smoke test, four ordinary members (not admins) use the site
    in Chrome: one posts through the submit form, the others reply to each other down a thread, and they all vote on
    the post and the comments, changing and undoing votes, with the arrows and scores checked. A fifth account,
    moderator of the test vault only, handles a member's report from the queue, removes and approves a comment,
    distinguishes its own, locks and unlocks the thread, and bans and unbans a member, each checked as the moderator,
    the members and logged-out visitors see it, and in the moderation log. And support requests: two members write to
    the admins from the contact page; an admin turns on admin mode with a two-factor code, takes one, notes and replies,
    and gives an employee one category, who sees only that; the member gets the answer from the admin team, without the
    admin's name or the staff note, and their reply reaches the ticket. Every page is checked
    for JavaScript errors, failed requests, sideways scrolling on a phone and unreadable text, and saved as a
    screenshot at desktop and phone width in both themes (the run's screenshots-VERSION artifact). See
    docs/RELEASING.md.
  • NSFW posts stay off the front page and /v/all unless a member asks for them: being over 18 used to put
    every NSFW post in those listings, which also took the ads off those pages. A new preference, "show NSFW posts on
    the front page and /v/all" (off by default, and only for members who said they're over 18), brings them back;
    NSFW vaults and their posts are shown in the vault itself as before.
  • Markdown follows CommonMark now, in place of reddit's snudown: posts, comments, messages, sidebars and the
    wiki use markdown-it-py, the standard most sites follow, with GitHub's tables, strikethrough and bare links,
    and tippr's own super^script, ^(several words), >!spoilers!< and :emoji:. New: task lists (- [ ] / - [x]
    show as ☐ / ☑), [words](example.com) links without https://, and /v/vault links, which snudown never made
    (it linked reddit's /r/ instead). A picture's address, ![words](address), is a link to it outside the wiki,
    not leftover syntax. Differences: a heading needs a space after its #s (#1 stays as typed), and the wiki no
    longer takes raw HTML tables (markdown tables do the same). Output is still checked against the same list of
    safe tags, raw HTML is still never used, and long or odd text renders quickly. Installs no longer build snudown
    or need gperf; linkify-it-py is new.
  • Formatting buttons and help for the new markdown: the toolbar over text boxes adds heading, code block,
    numbered list, task list and table buttons (code on several lines now becomes a ``` block). The "formatting help"
    table under the box shows every option, including strikethrough, superscript, headings, task lists, code blocks
    and tables, and reads properly in night mode; /help/formatting is rewritten to match.
  • Scales: tip a post toward what it's like. Up and down votes rank posts; a post's new "scales" link (beside
    "share") opens scales to tip instead: helpful ↔ unhelpful, human-made ↔ probably AI and beginner-friendly ↔
    in-depth, and behind "more scales", practical ↔ just for fun, well-sourced ↔ opinion and calm ↔ heated (open
    already when you've tipped one of those). Each member tips each scale once, and can change sides or take the tip
    back. A scale's tally (how many tipped
    each way, and a bar of the split) shows once you've tipped it, so the first tips don't steer everyone else, and
    the poster sees all of theirs. Scales are opinions, not reports: they don't rank posts, don't go to moderators,
    and "probably AI" sits beside the poster's own AI label without changing it; the panel points to "report" for
    posts that break a rule. Posters, logged-out visitors (asked to log in), members in a timeout, and removed,
    archived or sponsored posts can't be tipped. Tips are kept in PostgreSQL (scale_tips) and are in a member's
    data export.
  • Updating from /admin/servers shows its progress: while an update runs, the page keeps itself up to date every
    few seconds instead of needing reloads. Each server's card says what it's doing and for how long, with its log's
    latest lines open, and the updater now refreshes those every 10 seconds while the backup and the installer run
    (before, the page heard nothing from it until a step finished). While the site is down for the install, the page
    says so and keeps checking, then catches up when it's back; it stops once every server has finished. Servers
    that haven't started yet say they're waiting. (The updater that runs an update is the one already installed, so
    the progress reports start with the update after this one.)
  • /traffic/adverts counts ads: it read tables reddit filled from its ad servers' logs, which nothing filled
    here. The site counts them itself now: a sponsored post when it's shown in a listing (by post, and by campaign
    and vault for its traffic page) and when it's clicked, and each AdSense unit it puts on a page (sidebar, in-feed,
    or Auto ads pages). What Google filled the units with, and their clicks and earnings, stay in the AdSense
    account. Bots aren't counted.

🐞 Bug fixes

  • /admin/servers ran words together, and an update's log was one long paragraph: the page's space compression
    joined lines without a space ("The newest release is0.20.2", a server's name and id, "3.54(1, 5 and 15 minutes")
    and took the line breaks out of the log; both read properly now.
  • /traffic/languages and the "top vaults" table were empty: they listed last month, the newest reddit's batch
    traffic pipeline had finished; tippr counts as pages are viewed, so they list this month, and say so.
  • The sitemap left out the front page: it listed vaults from the most subscribed down, so the first page it
    gave search engines was the default /v/tippr ("Tippr Meta"), which Google then showed for a search for the site's
    name. The front page is the sitemap's first entry now, followed by the vault directory (/vaults) and the help
    pages and policies.
  • Clicking a sponsored post failed: its link goes through /click, served by reddit's separate click tracker,
    which was never ported to Python 3 (every click was an error) and which Docker installs didn't have at all. /click
    is part of the site now: it checks the link's signature, counts the click and sends the browser on. Updating
    removes the old click server (gunicorn-click).
  • Updating could leave the queues and jobs stopped: the installer installs the pinned Python packages, but pip
    kept a package already installed under the same name and version even when it came from elsewhere, and an older
    formenergy-observability from PyPI then conflicted with the pinned packaging: the pages worked, but paster refused
    to start the consumers and jobs. The packages pinned to a URL (the baseplate and formenergy-observability forks) are
    now always reinstalled, and the installer checks that the packages fit together, as paster does, failing the install
    (so an update rolls back) if they don't.
  • Clicking "reply" on a comment threw a JavaScript error ("e is not defined", from reddit's code): the reply
    box still opened, but the comment's hidden replies weren't shown with it, and the error was reported on every
    reply.
  • Search showed NSFW posts to everyone, and pages with NSFW posts had ads: search results included them for
    people who hadn't said they're over 18, logged out too (hiding them was reddit's safe_search experiment, never
    on); they're shown only to people who have now, as listings already did. And a page that shows any NSFW post
    (the front page, /v/all, other listings, profiles, search) has no AdSense ads, which Google doesn't allow next to
    adult content: before, only an NSFW vault's own pages and NSFW posts' pages dropped them.
  • Every page loaded a tracking pixel nothing used, and on Docker it was missing: reddit counted pageviews from
    the pixel's log, which nothing reads now that tippr counts them as it serves them, and Caddy had no route for it,
    so every page had a 404. Pages no longer load it (tracker_url is blank), and Caddy answers the remaining pixels
    (sponsored links, embeds) as the installer's nginx does.
  • A vault's NSFW setting was hard to find: it's labelled "NSFW: viewers must be 18 or older" on the vault form
    now, instead of "viewers must be over eighteen years old" (and the /v/all option gains its missing "in").
  • The support pages said "254 milliseconds ago": they say "just now" for the last minute, as the rest of the
    site does.
  • Search results showed the wrong descriptions: a vault's page described the whole site (its link previews
    already used the vault's own description), and a post's showed its markdown (* item, [link](https://...)).
    A vault's page now has its own description, and a post's or comment's reads as plain text.
  • A comment a moderator removed stayed in front of logged-out visitors for up to 2 minutes: they get a thread's
    comments from a short cache, which removing, approving, distinguishing or editing a comment didn't clear (it
    follows the comment count). Those now change the thread's cache key, so the next view is built afresh.
  • Removed posts and comments were hard to read for moderators: their salmon background left the grey tagline and
    buttons at 1.4:1. They're a pale red with a red edge now.
  • The unread message count was unreadable in night mode: night mode's link colour turned it teal on its orange
    badge; it's white again.

Downloads

  • Docker: docker pull techidiotsllc/tippr:0.21.0, or unpack tippr-0.21.0-compose.tar.gz, copy
    .env.example to .env, fill it in and run docker compose up -d (docker/README.md).
  • Proxmox: `tippr-0.21....
Read more

tippr v0.20.2

Choose a tag to compare

@github-actions github-actions released this 24 Oct 16:21

Downloads

  • Docker: docker pull techidiotsllc/tippr:0.20.2, or unpack tippr-0.20.2-compose.tar.gz, copy
    .env.example to .env, fill it in and run docker compose up -d (docker/README.md).
  • Proxmox: tippr-0.20.2-proxmox-amd64.tar.zst is an LXC template with the whole site installed;
    create a container with the site's domain as its hostname and start it (docs/PROXMOX.md).
  • Installer (Ubuntu 24.04): unpack tippr-0.20.2-installer.tar.gz into /home/tippr/src and
    run sudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.sh in tippr/; it doesn't need
    to clone anything (docs/INSTALL_tippr.md).

SHA256SUMS lists the files' checksums.

tippr v0.20.1

Choose a tag to compare

@github-actions github-actions released this 24 Oct 06:20

✨ Features and improvements

  • A browser test in the release workflow: after the smoke test, four ordinary members (not admins) use the site
    in Chrome: one posts through the submit form, the others reply to each other down a thread, and they all vote on
    the post and the comments, changing and undoing votes, with the arrows and scores checked. A fifth account,
    moderator of the test vault only, handles a member's report from the queue, removes and approves a comment,
    distinguishes its own, locks and unlocks the thread, and bans and unbans a member, each checked as the moderator,
    the members and logged-out visitors see it, and in the moderation log. And support requests: two members write to
    the admins from the contact page; an admin turns on admin mode with a two-factor code, takes one, notes and replies,
    and gives an employee one category, who sees only that; the member gets the answer from the admin team, without the
    admin's name or the staff note, and their reply reaches the ticket. Every page is checked
    for JavaScript errors, failed requests, sideways scrolling on a phone and unreadable text, and saved as a
    screenshot at desktop and phone width in both themes (the run's screenshots-VERSION artifact). See
    docs/RELEASING.md.

🐞 Bug fixes

  • Updating could leave the queues and jobs stopped: the installer installs the pinned Python packages, but pip
    kept a package already installed under the same name and version even when it came from elsewhere, and an older
    formenergy-observability from PyPI then conflicted with the pinned packaging: the pages worked, but paster refused
    to start the consumers and jobs. The packages pinned to a URL (the baseplate and formenergy-observability forks) are
    now always reinstalled, and the installer checks that the packages fit together, as paster does, failing the install
    (so an update rolls back) if they don't.
  • Clicking "reply" on a comment threw a JavaScript error ("e is not defined", from reddit's code): the reply
    box still opened, but the comment's hidden replies weren't shown with it, and the error was reported on every
    reply.
  • Every page loaded a tracking pixel nothing used, and on Docker it was missing: reddit counted pageviews from
    the pixel's log, which nothing reads now that tippr counts them as it serves them, and Caddy had no route for it,
    so every page had a 404. Pages no longer load it (tracker_url is blank), and Caddy answers the remaining pixels
    (sponsored links, embeds) as the installer's nginx does.
  • A vault's NSFW setting was hard to find: it's labelled "NSFW: viewers must be 18 or older" on the vault form
    now, instead of "viewers must be over eighteen years old" (and the /v/all option gains its missing "in").
  • The support pages said "254 milliseconds ago": they say "just now" for the last minute, as the rest of the
    site does.
  • Search results showed the wrong descriptions: a vault's page described the whole site (its link previews
    already used the vault's own description), and a post's showed its markdown (* item, [link](https://...)).
    A vault's page now has its own description, and a post's or comment's reads as plain text.
  • A comment a moderator removed stayed in front of logged-out visitors for up to 2 minutes: they get a thread's
    comments from a short cache, which removing, approving, distinguishing or editing a comment didn't clear (it
    follows the comment count). Those now change the thread's cache key, so the next view is built afresh.
  • Removed posts and comments were hard to read for moderators: their salmon background left the grey tagline and
    buttons at 1.4:1. They're a pale red with a red edge now.
  • The unread message count was unreadable in night mode: night mode's link colour turned it teal on its orange
    badge; it's white again.

Downloads

  • Docker: docker pull techidiotsllc/tippr:0.20.1, or unpack tippr-0.20.1-compose.tar.gz, copy
    .env.example to .env, fill it in and run docker compose up -d (docker/README.md).
  • Proxmox: tippr-0.20.1-proxmox-amd64.tar.zst is an LXC template with the whole site installed;
    create a container with the site's domain as its hostname and start it (docs/PROXMOX.md).
  • Installer (Ubuntu 24.04): unpack tippr-0.20.1-installer.tar.gz into /home/tippr/src and
    run sudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.sh in tippr/; it doesn't need
    to clone anything (docs/INSTALL_tippr.md).

SHA256SUMS lists the files' checksums.

tippr v0.20.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 03:42

✨ Features and improvements

  • Upgrades are much quicker: about 1½ minutes of downtime instead of 6½ on a test install. A release's installer
    tarball already holds its built Cython modules, translations and static files, but upgrades threw them away and
    built them again; now each build is fingerprinted (scripts/build-fingerprint: its inputs' contents, not file
    dates) and skipped while its inputs are unchanged, by the release or by an earlier run. The translations a release
    carries become a git checkout in place instead of being moved aside and cloned again (which also stops an
    i18n.old-<date> folder being left on each update), r2 is reinstalled only when its packaging or Cython modules
    change, and RabbitMQ restarts only when its settings do.
  • Every install runs the Python packages the release was tested with: the installer installs
    install/requirements.txt (moved from docker/), the pinned list the Docker image uses, in one go, instead of
    about 40 packages in groups at whatever versions were newest that day (and baseplate and formenergy-observability
    from their branches' tips). TIPPR_BASEPLATE_PIP_URL and TIPPR_FORMENERGY_OBSERVABILITY_PIP_URL still install
    another on top, but are empty by default. The old psycopg2-binary is replaced by the pinned psycopg2.
  • An account's status, from its /admin/users page: its staff permission (none, employee, sponsor or admin: the
    same employees list as /admin/config, with its checks, so no one removes their own admin permission), and whether
    it's one of the site's own accounts (a test account, a bot). The system user, AutoModerator and feed bots count as
    the site's own by themselves. The status column on /admin/users shows sponsors and employees too, and labels the
    site's own accounts, which don't take an Early Member place.
  • The consent banner asks about "optional analytics cookies" instead of naming Google Analytics; the privacy
    policy it links to says what they are. "Optional" makes clear that declining doesn't turn off the cookies the site
    needs. The preference says the same.
  • A clearer "Translating" help page (/help/translate): how to fix a translation as numbered steps, the file to
    edit on its own line, links to Poedit and Lokalize, and what to put in an issue as a list. The trophies help page
    lists Early Member among the awards the site gives.
  • Updates say the site is down for "a few minutes" (on /admin/servers and in the updater) instead of 5–10.

🐞 Bug fixes

  • /admin/servers showed the event collector queues in red with no processor, as if stopped. They're for an
    analytics event collector service, and without one (events_collector_url) the site queues nothing there and runs
    no processor for them on purpose: they now say "off (no event collector)".
  • The trophy case was unreadable in the dark theme: award names were always black (and descriptions dark grey);
    they follow the theme's text colors now.
  • The admin mode page on a remembered computer looked unfinished: "forget this computer" was a grey button with
    its explanation wrapping beside it, and the heading still asked for a one-time code. It's now a link under the
    main button with the explanation below it, and the heading asks for the password only.
  • Docker: a container could fail to start alongside the others ("No such file or directory:
    /config/docker.update.tmp"): every container writes the shared config in /config as it starts, through one
    temporary file name, so one could rename it away while another was still writing it. Each now uses a temporary
    file of its own, created private.

Downloads

  • Docker: docker pull techidiotsllc/tippr:0.20.0, or unpack tippr-0.20.0-compose.tar.gz, copy
    .env.example to .env, fill it in and run docker compose up -d (docker/README.md).
  • Proxmox: tippr-0.20.0-proxmox-amd64.tar.zst is an LXC template with the whole site installed;
    create a container with the site's domain as its hostname and start it (docs/PROXMOX.md).
  • Installer (Ubuntu 24.04): unpack tippr-0.20.0-installer.tar.gz into /home/tippr/src and
    run sudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.sh in tippr/; it doesn't need
    to clone anything (docs/INSTALL_tippr.md).

SHA256SUMS lists the files' checksums.