Commit graph

19 commits

Author SHA1 Message Date
642bec845a
ci: set nix options through NIX_CONFIG
Some checks failed
Build and Deploy to Production / test (push) Failing after 15s
Build and Deploy to Production / build (push) Has been skipped
Build and Deploy to Production / deploy (push) Has been skipped
The runner mounts a persistent nix-store volume over /nix. The current
nixos/nix image makes /etc/nix/nix.conf a symlink into /nix/store, and
the volume does not hold that path, so the link dangles and appending
to it fails before checkout: "/etc/nix/nix.conf: No such file or
directory".

Pass the settings in NIX_CONFIG instead. Without a config file Nix also
falls back to build-users-group = nixbld, which the container lacks, so
set it empty and turn the sandbox off, as the image config does.

Assisted-by: Claude:opus-5-5
2026-10-18 09:34:44 +04:00
f1ceb4efc7
bingo: store photos in their own bucket
All checks were successful
Build and Deploy to Production / test (push) Successful in 23s
Build and Deploy to Production / build (push) Successful in 1m8s
Build and Deploy to Production / deploy (push) Successful in 37s
The bingo photos sat under bingo/ in the invoice bucket. Store them in
BINGO_S3_BUCKET (datacenterbingo-photos in prod, created and pre-filled
by the storage repo with the same keys) and fall back to S3_BUCKET when
unset, so dev and tests need nothing new.

Assisted-by: Claude:opus-5
2026-10-12 04:09:08 +04:00
26e862ff04
bingo: ping IndexNow when the card changes
A newly recorded incident only showed up in search once a crawler
happened to come back. IndexNow lets Bing, Yandex and the other
participating engines know about changed URLs right away.

Bingo::IndexNow posts the card URLs plus the affected datacenter pages
to api.indexnow.org, in a background thread so admin saves don't wait.
Incidents ping their datacenter. Edits ping the datacenter, or every
page when positions move (create, delete, reorder, sort). A deleted
datacenter's pages are included so the engines see the 404. BingoWeb
serves the key at /<key>.txt.

The key comes from the INDEXNOW Forgejo secret, written to .env as
INDEXNOW_KEY. With no key set this does nothing.

Assisted-by: Claude:opus-5
2026-10-10 09:42:46 +04:00
70f1734c5d
bingo: stop serving bingo.asxp.io
All checks were successful
Build and Deploy to Production / test (push) Successful in 21s
Build and Deploy to Production / build (push) Successful in 52s
Build and Deploy to Production / deploy (push) Successful in 36s
datacenterbingo.xyz resolves now, so the stopgap second hostname is no
longer needed. Drop it from the Traefik rule and the deploy env; the
app-side BINGO_ALT_HOST support stays but is unset.

Assisted-by: Claude:opus-5
2026-10-10 06:07:37 +04:00
cd04b01e57
bingo: serve bingo.asxp.io too, credit asxp.io in footer
datacenterbingo.xyz is not in the .xyz zone yet, while bingo.asxp.io
already resolves. Serve the card on both (BINGO_ALT_HOST) so it is
reachable now; canonical and hreflang links keep pointing at the .xyz
domain. Footer gets a copyright line linking back to asxp.io.

Assisted-by: Claude:opus-5
2026-10-10 06:00:39 +04:00
90e1bbc9c5
bingo: move to datacenterbingo.xyz
All checks were successful
Build and Deploy to Production / test (push) Successful in 21s
Build and Deploy to Production / build (push) Successful in 52s
Build and Deploy to Production / deploy (push) Successful in 39s
The card gets its own domain instead of a subdomain of the IE site.
www. is routed to the same container and 301-redirected to the apex in
config.ru, so there is one canonical host for links and the cert.

Assisted-by: Claude:opus-5
2026-10-10 05:19:50 +04:00
7820f138f6
ci: read registry token from FJ_TOKEN
All checks were successful
Build and Deploy to Production / test (push) Successful in 19s
Build and Deploy to Production / build (push) Successful in 52s
Build and Deploy to Production / deploy (push) Successful in 1m0s
Forgejo no longer allows creating secrets prefixed FORGEJO_, so the
regenerated registry token (the old one got 401 reqPackageAccess on
push) has to live under a new name.

Assisted-by: Claude:opus-5
2026-10-10 04:56:55 +04:00
bdb3682e18
bingo: serve datacenter bingo on bingo.asxp.io
Some checks failed
Tests / test (push) Successful in 18s
Build and Deploy to Production / test (push) Successful in 18s
Build and Deploy to Production / build (push) Failing after 2s
Build and Deploy to Production / deploy (push) Has been skipped
Add a second public site to the same process: a 5x5 card of the 25
largest Russian datacenters where a cell is crossed out once an incident
with a public source is recorded (Yandex Sasovo and Kaluga drone strikes
on 2026-10-08/09 are seeded). config.ru dispatches by Host, so it rides
the existing container, DB and bucket instead of a new deploy.

The card is localized ru/en/uk with per-locale columns falling back to
ru. Content is managed from /admin/bingo on asxp.io, reusing AdminAuth
and CSRF. Photos go to the existing bucket under bingo/ and are proxied
by the app, so the bucket stays private and storage needs no change.

The seed data was fact-checked against operator sites and press on
2026-10-10; several entries in the original list were wrong or vague.

Assisted-by: Claude:opus-5
2026-10-10 04:51:26 +04:00
0fbb6ee809
invoices: multi-crypto payment support
All checks were successful
Build and Deploy to Production / test (push) Successful in 18s
Build and Deploy to Production / build (push) Successful in 49s
Build and Deploy to Production / deploy (push) Successful in 31s
One asset per invoice from a registry (lib/crypto_asset.rb): BTC, LTC,
ETH, XMR, SOL, ALGO, USDT/USDC on ERC-20/TRC-20/BEP-20/Solana/Algorand.
Migration 003 generalizes the ltc_* columns to crypto_* + crypto_coin
(existing LTC invoices backfilled). QR payload adapts per asset: BIP21
amount URIs where supported, bare address for tokens with a network
hint on the PDF. Default addresses come from the CRYPTO_ADDRESSES
secret (JSON code=>address); LTC_ADDRESS still works as legacy.
2026-07-03 02:01:57 +04:00
15cff895af
ci: cache gems and persist nix store between runs 2026-07-02 18:39:37 +04:00
67263cb75c
ci: gate build on tests, deploy waits for container health
Some checks failed
Build and Deploy to Production / build (push) Blocked by required conditions
Build and Deploy to Production / deploy (push) Blocked by required conditions
Build and Deploy to Production / test (push) Failing after 11m37s
2026-07-02 18:32:53 +04:00
9485b6b72a
ci: drop git install — image ships git-minimal, full git conflicts
All checks were successful
Build and Deploy to Production / build (push) Successful in 1m2s
Tests / test (push) Successful in 1m1s
Build and Deploy to Production / deploy (push) Successful in 26s
2026-07-02 18:09:39 +04:00
5dbd1d4dc8
ci: use service hostname — runner networking fixed to per-workflow bridge
Some checks failed
Tests / test (push) Failing after 18s
Build and Deploy to Production / build (push) Successful in 51s
Build and Deploy to Production / deploy (push) Successful in 24s
2026-07-02 18:02:02 +04:00
6807d41aa4
ci: publish postgres service port — job containers use host network
Some checks failed
Tests / test (push) Failing after 1s
Build and Deploy to Production / build (push) Successful in 53s
Build and Deploy to Production / deploy (push) Successful in 25s
2026-07-02 17:57:25 +04:00
9ff394c75f
ci: run test suite on push
Some checks failed
Build and Deploy to Production / build (push) Successful in 1m0s
Build and Deploy to Production / deploy (push) Successful in 43s
Tests / test (push) Failing after 1s
2026-07-02 17:38:35 +04:00
d37f1d5dfe
ltc address secret
All checks were successful
Build and Deploy to Production / build (push) Successful in 49s
Build and Deploy to Production / deploy (push) Successful in 26s
2026-06-08 18:47:58 +03:00
dc40faf5df
deploy: write invoicing env vars to .env
All checks were successful
Build and Deploy to Production / build (push) Successful in 46s
Build and Deploy to Production / deploy (push) Successful in 24s
Extends the .env heredoc the workflow drops on the prod host with:

- ADMIN_USER / ADMIN_PASSWORD     — gate /admin/*
- DATABASE_URL                    — points at the storage stack's Postgres
- S3_* (endpoint, bucket, creds)  — MinIO; S3_PUBLIC_ENDPOINT is the
                                    s3.asxp.io hostname used only for
                                    presigning so browser-facing URLs
                                    resolve over Traefik+TLS.

Non-secret values stay hardcoded in the workflow; secrets come from
Forgejo. ASXPIO_DB_PASSWORD / S3 creds must match the corresponding
secrets on the storage repo or the app can't authenticate.
2026-05-26 18:07:15 +03:00
1ab09043ee
ruby rework with contact form
All checks were successful
Build and Deploy to Production / build (push) Successful in 51s
Build and Deploy to Production / deploy (push) Successful in 34s
2026-05-05 00:45:27 +04:00
13f6db18f2
ci/cd 2025-11-25 05:24:04 +02:00