Rollouts agent

rollouts1.a.jpfennell.com

github.com/jamespfennell/rollouts

Projects

PATH train GTFS

github.com/jamespfennell/path-train-gtfs-realtime

Last deployed 51 weeks ago.

No pending deployment.

Most recent deployments
Add run arguments to status page (#8)

Build #64. Deployed 51 weeks ago.

Deployment logs
Pull
$ /mount/docker compose pull
time="2025-04-29T12:45:38Z" level=warning msg="/home/james/path-train-gtfsrt/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
 path2 Skipped - Image is already being pulled by path-train-gtfs-realtime 
 path-train-gtfs-realtime Pulling 
 path-train-gtfs-realtime Pulled 

Success
              
Redeploy
$ /mount/docker compose up -d
time="2025-04-29T12:45:38Z" level=warning msg="/home/james/path-train-gtfsrt/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
 Container 6f100c39b6be_path-train-gtfsrt-path2-1  Running
 Container 0cbe55bb1fcf_path-train-gtfsrt-path-train-gtfs-realtime-1  Starting
 Container 0cbe55bb1fcf_path-train-gtfsrt-path-train-gtfs-realtime-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping path.transitdata.nyc
$ curl --fail-with-body -v https://path.transitdata.nyc/gtfsrt --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 162.243.34.11:443...
* Connected to path.transitdata.nyc (162.243.34.11) port 443 (#0)
* ALPN: offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2089 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [80 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=path.transitdata.nyc
*  start date: Apr 28 01:48:20 2025 GMT
*  expire date: Jul 27 01:48:19 2025 GMT
*  subjectAltName: host "path.transitdata.nyc" matched cert's "path.transitdata.nyc"
*  issuer: C=US; O=Let's Encrypt; CN=E5
*  SSL certificate verify ok.
} [5 bytes data]
* using HTTP/2
* h2h3 [:method: GET]
* h2h3 [:path: /gtfsrt]
* h2h3 [:scheme: https]
* h2h3 [:authority: path.transitdata.nyc]
* h2h3 [user-agent: curl/7.88.1]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x57ae10372780)
} [5 bytes data]
> GET /gtfsrt HTTP/2
> Host: path.transitdata.nyc
> user-agent: curl/7.88.1
> accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: application/octet-stream
< date: Tue, 29 Apr 2025 12:45:43 GMT
< via: 1.1 Caddy
< 
{ [5 bytes data]

100  5839    0  5839    0     0   112k      0 --:--:-- --:--:-- --:--:--  114k
* Connection #0 to host path.transitdata.nyc left intact

Success
              
Add run arguments to status page (#8)

Build #64. Failed 51 weeks ago.

Deployment logs
Pull
$ /mount/docker compose pull
docker: unknown command: docker compose

Run 'docker --help' for more information

Failure
              
Add run arguments to status page (#8)

Build #64. Failed 51 weeks ago.

Deployment logs
Pull
$ /mount/docker compose pull
Failed to start command.
This is probably an error in the project configuration.
Error: No such file or directory (os error 2)
Failure
              
Project configuration
{
  "auth_token": "",
  "branch": "master",
  "name": "PATH train GTFS",
  "paused": false,
  "repo": "github.com/jamespfennell/path-train-gtfs-realtime",
  "retention": 10,
  "steps": [
    {
      "name": "Pull",
      "run": "docker compose pull"
    },
    {
      "name": "Redeploy",
      "run": "docker compose up -d"
    },
    {
      "name": "Wait for 5 seconds",
      "run": "sleep 5"
    },
    {
      "name": "Ping path.transitdata.nyc",
      "run": "curl --fail-with-body -v https://path.transitdata.nyc/gtfsrt --output /dev/null"
    }
  ],
  "wait_minutes": 0,
  "working_directory": "/home/james/path-train-gtfsrt"
}

Texcraft

github.com/jamespfennell/texcraft

Last deployed 9 hours ago.

No pending deployment.

Most recent deployments
box CLI: add linebreak command

Build #936. Deployed 9 hours ago.

Deployment logs
Pull
$ docker compose pull
 texcraft.dev Pulling 
 redis Pulling 
 play.texcraft.dev Pulling 
 redis Pulled 
 a7730063fcfe Already exists 
 6a0ac1617861 Pulling fs layer 
 bd08a3fe88bb Pulling fs layer 
 1f5a7c340982 Pulling fs layer 
 387d6e14b64b Pulling fs layer 
 4f4fb700ef54 Pulling fs layer 
 ced802a712dd Pulling fs layer 
 b4d493871bd4 Pulling fs layer 
 7cefc0ec811f Pulling fs layer 
 4f4fb700ef54 Waiting 
 ced802a712dd Waiting 
 b4d493871bd4 Waiting 
 7cefc0ec811f Waiting 
 387d6e14b64b Waiting 
 b6c0324abfff Pulling fs layer 
 b6c0324abfff Waiting 
 bd08a3fe88bb Downloading [>                                                  ]  29.02kB/2.887MB
 1f5a7c340982 Downloading [==>                                                ]     393B/7.5kB
 1f5a7c340982 Downloading [==================================================>]    7.5kB/7.5kB
 1f5a7c340982 Verifying Checksum 
 1f5a7c340982 Download complete 
 6a0ac1617861 Downloading [>                                                  ]  38.72kB/3.864MB
 6a0ac1617861 Verifying Checksum 
 6a0ac1617861 Download complete 
 6a0ac1617861 Extracting [>                                                  ]  65.54kB/3.864MB
 bd08a3fe88bb Verifying Checksum 
 bd08a3fe88bb Download complete 
 4f4fb700ef54 Downloading [==================================================>]      32B/32B
 4f4fb700ef54 Verifying Checksum 
 4f4fb700ef54 Download complete 
 6a0ac1617861 Extracting [=================>                                 ]  1.376MB/3.864MB
 ced802a712dd Downloading [==================================================>]      98B/98B
 ced802a712dd Verifying Checksum 
 ced802a712dd Download complete 
 b4d493871bd4 Downloading [>                                                  ]  13.67kB/1.348MB
 6a0ac1617861 Extracting [==================================================>]  3.864MB/3.864MB
 b4d493871bd4 Verifying Checksum 
 b4d493871bd4 Download complete 
 6a0ac1617861 Pull complete 
 bd08a3fe88bb Extracting [>                                                  ]  32.77kB/2.887MB
 7cefc0ec811f Downloading [>                                                  ]  40.12kB/3.992MB
 b6c0324abfff Downloading [>                                                  ]  39.99kB/3.941MB
 7cefc0ec811f Verifying Checksum 
 7cefc0ec811f Download complete 
 bd08a3fe88bb Extracting [===========>                                       ]  655.4kB/2.887MB
 387d6e14b64b Downloading [>                                                  ]  173.4kB/17MB
 b6c0324abfff Verifying Checksum 
 b6c0324abfff Download complete 
 b6c0324abfff Extracting [>                                                  ]  65.54kB/3.941MB
 bd08a3fe88bb Extracting [==========================>                        ]   1.54MB/2.887MB
 387d6e14b64b Downloading [============>                                      ]  4.234MB/17MB
 b6c0324abfff Extracting [================>                                  ]  1.311MB/3.941MB
 bd08a3fe88bb Extracting [==================================================>]  2.887MB/2.887MB
 387d6e14b64b Downloading [===============>                                   ]  5.297MB/17MB
 b6c0324abfff Extracting [==================================================>]  3.941MB/3.941MB
 b6c0324abfff Pull complete 
 play.texcraft.dev Pulled 
 bd08a3fe88bb Pull complete 
 387d6e14b64b Downloading [=====================>                             ]  7.422MB/17MB
 1f5a7c340982 Extracting [==================================================>]    7.5kB/7.5kB
 1f5a7c340982 Extracting [==================================================>]    7.5kB/7.5kB
 1f5a7c340982 Pull complete 
 387d6e14b64b Downloading [===========================>                       ]  9.513MB/17MB
 387d6e14b64b Downloading [=================================>                 ]  11.44MB/17MB
 387d6e14b64b Downloading [==============================================>    ]  15.88MB/17MB
 387d6e14b64b Verifying Checksum 
 387d6e14b64b Download complete 
 387d6e14b64b Extracting [>                                                  ]  196.6kB/17MB
 387d6e14b64b Extracting [========>                                          ]  2.753MB/17MB
 387d6e14b64b Extracting [=============>                                     ]  4.719MB/17MB
 387d6e14b64b Extracting [=================>                                 ]  5.898MB/17MB
 387d6e14b64b Extracting [=====================>                             ]  7.274MB/17MB
 387d6e14b64b Extracting [========================>                          ]  8.454MB/17MB
 387d6e14b64b Extracting [============================>                      ]   9.83MB/17MB
 387d6e14b64b Extracting [================================>                  ]  11.21MB/17MB
 387d6e14b64b Extracting [==========================================>        ]  14.35MB/17MB
 387d6e14b64b Extracting [==================================================>]     17MB/17MB
 387d6e14b64b Pull complete 
 4f4fb700ef54 Extracting [==================================================>]      32B/32B
 4f4fb700ef54 Extracting [==================================================>]      32B/32B
 4f4fb700ef54 Pull complete 
 ced802a712dd Extracting [==================================================>]      98B/98B
 ced802a712dd Extracting [==================================================>]      98B/98B
 ced802a712dd Pull complete 
 b4d493871bd4 Extracting [=>                                                 ]  32.77kB/1.348MB
 b4d493871bd4 Extracting [==================================================>]  1.348MB/1.348MB
 b4d493871bd4 Pull complete 
 7cefc0ec811f Extracting [>                                                  ]  65.54kB/3.992MB
 7cefc0ec811f Extracting [====>                                              ]  393.2kB/3.992MB
 7cefc0ec811f Extracting [==========>                                        ]    852kB/3.992MB
 7cefc0ec811f Extracting [====================================>              ]  2.884MB/3.992MB
 7cefc0ec811f Extracting [=========================================>         ]  3.342MB/3.992MB
 7cefc0ec811f Extracting [============================================>      ]  3.539MB/3.992MB
 7cefc0ec811f Extracting [=============================================>     ]   3.67MB/3.992MB
 7cefc0ec811f Extracting [================================================>  ]  3.867MB/3.992MB
 7cefc0ec811f Extracting [==================================================>]  3.992MB/3.992MB
 7cefc0ec811f Extracting [==================================================>]  3.992MB/3.992MB
 7cefc0ec811f Pull complete 
 texcraft.dev Pulled 

Success
              
Redeploy
$ docker compose up -d
 Container texcraftdev-texcraft.dev-1  Recreate
 Container texcraftdev-play.texcraft.dev-1  Recreate
 Container texcraftdev-redis-1  Running
 Container texcraftdev-play.texcraft.dev-1  Recreated
 Container texcraftdev-texcraft.dev-1  Recreated
 Container texcraftdev-texcraft.dev-1  Starting
 Container texcraftdev-play.texcraft.dev-1  Starting
 Container texcraftdev-texcraft.dev-1  Started
 Container texcraftdev-play.texcraft.dev-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping texcraft.dev
$ curl --fail-with-body -v https://texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1567 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2035 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [79 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=texcraft.dev
*  start date: Apr 21 13:12:50 2026 GMT
*  expire date: Jul 20 13:12:49 2026 GMT
*  subjectAltName: host "texcraft.dev" matched cert's "texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E8
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Tue, 21 Apr 2026 14:13:23 GMT
< etag: "dhyw5f0vmwaobsk-gzip"
< last-modified: Tue, 21 Apr 2026 14:09:42 GMT
< server: Caddy
< vary: Accept-Encoding
< via: 1.1 Caddy
< 
} [5 bytes data]

100 15284    0 15284    0     0   263k      0 --:--:-- --:--:-- --:--:--  266k
* Connection #0 to host texcraft.dev left intact

Success
              
Ping play.texcraft.dev
$ curl --fail-with-body -v https://play.texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host play.texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1572 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2046 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [80 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=play.texcraft.dev
*  start date: Feb 21 13:50:24 2026 GMT
*  expire date: May 22 13:50:23 2026 GMT
*  subjectAltName: host "play.texcraft.dev" matched cert's "play.texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E7
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to play.texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://play.texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: play.texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: play.texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Tue, 21 Apr 2026 14:13:23 GMT
< via: 1.1 Caddy
< content-length: 514
< 
{ [5 bytes data]

100   514  100   514    0     0  11234      0 --:--:-- --:--:-- --:--:-- 11422
* Connection #0 to host play.texcraft.dev left intact

Success
              
box lang: two improvements

Build #935. Deployed 14 days ago.

Deployment logs
Pull
$ docker compose pull
 texcraft.dev Pulling 
 play.texcraft.dev Pulling 
 redis Pulling 
 redis Pulled 
 589002ba0eae Already exists 
 69a0ee2ce755 Already exists 
 6304d7b2d77e Already exists 
 4638b30f6c53 Already exists 
 a7730063fcfe Already exists 
 7bcc8268cbff Pulling fs layer 
 4f4fb700ef54 Already exists 
 b5fbe06a7ec2 Pulling fs layer 
 1c9771484bd8 Pulling fs layer 
 02c09df0aa42 Pulling fs layer 
 02c09df0aa42 Waiting 
 1c9771484bd8 Downloading [>                                                  ]  14.05kB/1.348MB
 1c9771484bd8 Verifying Checksum 
 1c9771484bd8 Download complete 
 b5fbe06a7ec2 Downloading [==================================================>]      98B/98B
 b5fbe06a7ec2 Verifying Checksum 
 b5fbe06a7ec2 Download complete 
 b5fbe06a7ec2 Extracting [==================================================>]      98B/98B
 b5fbe06a7ec2 Extracting [==================================================>]      98B/98B
 b5fbe06a7ec2 Pull complete 
 1c9771484bd8 Extracting [=>                                                 ]  32.77kB/1.348MB
 02c09df0aa42 Downloading [>                                                  ]  41.05kB/3.989MB
 1c9771484bd8 Extracting [===============>                                   ]    426kB/1.348MB
 7bcc8268cbff Downloading [>                                                  ]  40.28kB/3.941MB
 02c09df0aa42 Downloading [=======================================>           ]  3.146MB/3.989MB
 02c09df0aa42 Verifying Checksum 
 02c09df0aa42 Download complete 
 1c9771484bd8 Extracting [===============================>                   ]    852kB/1.348MB
 7bcc8268cbff Downloading [============================>                      ]   2.26MB/3.941MB
 7bcc8268cbff Verifying Checksum 
 7bcc8268cbff Download complete 
 7bcc8268cbff Extracting [>                                                  ]  65.54kB/3.941MB
 1c9771484bd8 Extracting [=================================================> ]  1.343MB/1.348MB
 1c9771484bd8 Extracting [==================================================>]  1.348MB/1.348MB
 7bcc8268cbff Extracting [===========>                                       ]  917.5kB/3.941MB
 1c9771484bd8 Pull complete 
 02c09df0aa42 Extracting [>                                                  ]  65.54kB/3.989MB
 7bcc8268cbff Extracting [===============>                                   ]  1.245MB/3.941MB
 7bcc8268cbff Extracting [=====================>                             ]  1.704MB/3.941MB
 02c09df0aa42 Extracting [===>                                               ]  262.1kB/3.989MB
 7bcc8268cbff Extracting [==============================>                    ]  2.425MB/3.941MB
 02c09df0aa42 Extracting [====>                                              ]  393.2kB/3.989MB
 7bcc8268cbff Extracting [=================================================> ]  3.867MB/3.941MB
 7bcc8268cbff Extracting [==================================================>]  3.941MB/3.941MB
 7bcc8268cbff Pull complete 
 02c09df0aa42 Extracting [======>                                            ]  524.3kB/3.989MB
 02c09df0aa42 Extracting [========>                                          ]  655.4kB/3.989MB
 02c09df0aa42 Extracting [==============>                                    ]   1.18MB/3.989MB
 02c09df0aa42 Extracting [=========================>                         ]  2.032MB/3.989MB
 02c09df0aa42 Extracting [=========================================>         ]  3.277MB/3.989MB
 02c09df0aa42 Extracting [===========================================>       ]  3.473MB/3.989MB
 02c09df0aa42 Extracting [=============================================>     ]  3.604MB/3.989MB
 02c09df0aa42 Extracting [=================================================> ]  3.932MB/3.989MB
 02c09df0aa42 Extracting [==================================================>]  3.989MB/3.989MB
 02c09df0aa42 Extracting [==================================================>]  3.989MB/3.989MB
 02c09df0aa42 Pull complete 
 texcraft.dev Pulled 
 play.texcraft.dev Pulled 

Success
              
Redeploy
$ docker compose up -d
 Container texcraftdev-redis-1  Running
 Container texcraftdev-texcraft.dev-1  Recreate
 Container texcraftdev-play.texcraft.dev-1  Recreate
 Container texcraftdev-play.texcraft.dev-1  Recreated
 Container texcraftdev-texcraft.dev-1  Recreated
 Container texcraftdev-texcraft.dev-1  Starting
 Container texcraftdev-play.texcraft.dev-1  Starting
 Container texcraftdev-play.texcraft.dev-1  Started
 Container texcraftdev-texcraft.dev-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping texcraft.dev
$ curl --fail-with-body -v https://texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1567 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2028 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [79 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=texcraft.dev
*  start date: Feb 20 23:30:24 2026 GMT
*  expire date: May 21 23:30:23 2026 GMT
*  subjectAltName: host "texcraft.dev" matched cert's "texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E8
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Tue, 07 Apr 2026 17:50:15 GMT
< etag: "dhn406135g5cbsk-gzip"
< last-modified: Tue, 07 Apr 2026 17:47:00 GMT
< server: Caddy
< vary: Accept-Encoding
< via: 1.1 Caddy
< 
} [5 bytes data]

100 15284    0 15284    0     0   207k      0 --:--:-- --:--:-- --:--:--  210k
* Connection #0 to host texcraft.dev left intact

Success
              
Ping play.texcraft.dev
$ curl --fail-with-body -v https://play.texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host play.texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1572 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2046 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [80 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=play.texcraft.dev
*  start date: Feb 21 13:50:24 2026 GMT
*  expire date: May 22 13:50:23 2026 GMT
*  subjectAltName: host "play.texcraft.dev" matched cert's "play.texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E7
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to play.texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://play.texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: play.texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: play.texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Tue, 07 Apr 2026 17:50:15 GMT
< via: 1.1 Caddy
< content-length: 514
< 
{ [5 bytes data]

100   514  100   514    0     0   9393      0 --:--:-- --:--:-- --:--:--  9698
* Connection #0 to host play.texcraft.dev left intact

Success
              
box CLI: fix docs

Build #934. Deployed 14 days ago.

Deployment logs
Pull
$ docker compose pull
 redis Pulling 
 play.texcraft.dev Pulling 
 texcraft.dev Pulling 
 redis Pulled 
 589002ba0eae Already exists 
 69a0ee2ce755 Already exists 
 6304d7b2d77e Already exists 
 4638b30f6c53 Already exists 
 4f4fb700ef54 Already exists 
 c3653771a190 Pulling fs layer 
 bcdffb564770 Pulling fs layer 
 d3d1d2a15120 Pulling fs layer 
 a7730063fcfe Pulling fs layer 
 3e450a236251 Pulling fs layer 
 a7730063fcfe Waiting 
 3e450a236251 Waiting 
 c3653771a190 Downloading [==================================================>]      98B/98B
 c3653771a190 Verifying Checksum 
 c3653771a190 Download complete 
 c3653771a190 Extracting [==================================================>]      98B/98B
 c3653771a190 Extracting [==================================================>]      98B/98B
 bcdffb564770 Downloading [>                                                  ]  14.11kB/1.348MB
 d3d1d2a15120 Downloading [>                                                  ]     41kB/3.972MB
 bcdffb564770 Downloading [==================================================>]  1.348MB/1.348MB
 bcdffb564770 Verifying Checksum 
 bcdffb564770 Download complete 
 c3653771a190 Pull complete 
 bcdffb564770 Extracting [=>                                                 ]  32.77kB/1.348MB
 d3d1d2a15120 Downloading [============================================>      ]  3.535MB/3.972MB
 a7730063fcfe Downloading [>                                                  ]  507.9kB/49.3MB
 d3d1d2a15120 Verifying Checksum 
 d3d1d2a15120 Download complete 
 bcdffb564770 Extracting [=================>                                 ]  458.8kB/1.348MB
 3e450a236251 Downloading [>                                                  ]  40.12kB/3.941MB
 a7730063fcfe Downloading [===>                                               ]  3.015MB/49.3MB
 bcdffb564770 Extracting [==================================>                ]  917.5kB/1.348MB
 3e450a236251 Downloading [============================>                      ]  2.208MB/3.941MB
 a7730063fcfe Downloading [=====>                                             ]   5.53MB/49.3MB
 3e450a236251 Verifying Checksum 
 3e450a236251 Download complete 
 bcdffb564770 Extracting [==================================================>]  1.348MB/1.348MB
 a7730063fcfe Downloading [=========>                                         ]  9.538MB/49.3MB
 bcdffb564770 Pull complete 
 a7730063fcfe Downloading [==============>                                    ]  14.05MB/49.3MB
 d3d1d2a15120 Extracting [>                                                  ]  65.54kB/3.972MB
 a7730063fcfe Downloading [=====================>                             ]   21.6MB/49.3MB
 d3d1d2a15120 Extracting [====>                                              ]  393.2kB/3.972MB
 a7730063fcfe Downloading [==============================>                    ]  30.16MB/49.3MB
 d3d1d2a15120 Extracting [======>                                            ]  524.3kB/3.972MB
 a7730063fcfe Downloading [==================================>                ]   33.7MB/49.3MB
 a7730063fcfe Downloading [======================================>            ]  37.74MB/49.3MB
 a7730063fcfe Downloading [==========================================>        ]  42.25MB/49.3MB
 d3d1d2a15120 Extracting [========>                                          ]  655.4kB/3.972MB
 a7730063fcfe Downloading [================================================>  ]  48.31MB/49.3MB
 a7730063fcfe Verifying Checksum 
 a7730063fcfe Download complete 
 d3d1d2a15120 Extracting [===========>                                       ]  917.5kB/3.972MB
 d3d1d2a15120 Extracting [==============>                                    ]  1.114MB/3.972MB
 d3d1d2a15120 Extracting [=====================================>             ]  3.015MB/3.972MB
 a7730063fcfe Extracting [>                                                  ]  524.3kB/49.3MB
 d3d1d2a15120 Extracting [=========================================>         ]  3.277MB/3.972MB
 a7730063fcfe Extracting [=>                                                 ]  1.573MB/49.3MB
 d3d1d2a15120 Extracting [===========================================>       ]  3.473MB/3.972MB
 d3d1d2a15120 Extracting [=============================================>     ]  3.604MB/3.972MB
 a7730063fcfe Extracting [==>                                                ]  2.621MB/49.3MB
 a7730063fcfe Extracting [===>                                               ]  3.146MB/49.3MB
 d3d1d2a15120 Extracting [=================================================> ]  3.932MB/3.972MB
 d3d1d2a15120 Extracting [==================================================>]  3.972MB/3.972MB
 d3d1d2a15120 Pull complete 
 a7730063fcfe Extracting [====>                                              ]  4.194MB/49.3MB
 texcraft.dev Pulled 
 a7730063fcfe Extracting [====>                                              ]  4.719MB/49.3MB
 a7730063fcfe Extracting [=====>                                             ]  5.767MB/49.3MB
 a7730063fcfe Extracting [======>                                            ]  6.816MB/49.3MB
 a7730063fcfe Extracting [=======>                                           ]  7.864MB/49.3MB
 a7730063fcfe Extracting [=========>                                         ]  9.437MB/49.3MB
 a7730063fcfe Extracting [==========>                                        ]  10.49MB/49.3MB
 a7730063fcfe Extracting [===========>                                       ]  11.53MB/49.3MB
 a7730063fcfe Extracting [============>                                      ]  12.06MB/49.3MB
 a7730063fcfe Extracting [=============>                                     ]  13.11MB/49.3MB
 a7730063fcfe Extracting [==============>                                    ]  14.68MB/49.3MB
 a7730063fcfe Extracting [================>                                  ]  16.25MB/49.3MB
 a7730063fcfe Extracting [==================>                                ]  17.83MB/49.3MB
 a7730063fcfe Extracting [===================>                               ]   19.4MB/49.3MB
 a7730063fcfe Extracting [====================>                              ]  20.45MB/49.3MB
 a7730063fcfe Extracting [=====================>                             ]   21.5MB/49.3MB
 a7730063fcfe Extracting [======================>                            ]  22.02MB/49.3MB
 a7730063fcfe Extracting [=======================>                           ]  23.59MB/49.3MB
 a7730063fcfe Extracting [=========================>                         ]  25.17MB/49.3MB
 a7730063fcfe Extracting [==========================>                        ]  25.69MB/49.3MB
 a7730063fcfe Extracting [==========================>                        ]  26.21MB/49.3MB
 a7730063fcfe Extracting [===========================>                       ]  26.74MB/49.3MB
 a7730063fcfe Extracting [============================>                      ]  27.79MB/49.3MB
 a7730063fcfe Extracting [============================>                      ]  28.31MB/49.3MB
 a7730063fcfe Extracting [=============================>                     ]  29.36MB/49.3MB
 a7730063fcfe Extracting [==============================>                    ]  30.41MB/49.3MB
 a7730063fcfe Extracting [================================>                  ]  31.98MB/49.3MB
 a7730063fcfe Extracting [=================================>                 ]  33.03MB/49.3MB
 a7730063fcfe Extracting [===================================>               ]   34.6MB/49.3MB
 a7730063fcfe Extracting [====================================>              ]  35.65MB/49.3MB
 a7730063fcfe Extracting [=====================================>             ]   36.7MB/49.3MB
 a7730063fcfe Extracting [======================================>            ]  37.75MB/49.3MB
 a7730063fcfe Extracting [======================================>            ]  38.27MB/49.3MB
 a7730063fcfe Extracting [=======================================>           ]   38.8MB/49.3MB
 a7730063fcfe Extracting [========================================>          ]  39.85MB/49.3MB
 a7730063fcfe Extracting [=========================================>         ]  40.89MB/49.3MB
 a7730063fcfe Extracting [==========================================>        ]  41.94MB/49.3MB
 a7730063fcfe Extracting [===========================================>       ]  42.99MB/49.3MB
 a7730063fcfe Extracting [============================================>      ]  43.52MB/49.3MB
 a7730063fcfe Extracting [=============================================>     ]  44.56MB/49.3MB
 a7730063fcfe Extracting [==============================================>    ]  45.61MB/49.3MB
 a7730063fcfe Extracting [==============================================>    ]  46.14MB/49.3MB
 a7730063fcfe Extracting [===============================================>   ]  46.66MB/49.3MB
 a7730063fcfe Extracting [===============================================>   ]  47.19MB/49.3MB
 a7730063fcfe Extracting [================================================>  ]  47.71MB/49.3MB
 a7730063fcfe Extracting [================================================>  ]  48.23MB/49.3MB
 a7730063fcfe Extracting [=================================================> ]  48.76MB/49.3MB
 a7730063fcfe Extracting [=================================================> ]  49.28MB/49.3MB
 a7730063fcfe Extracting [==================================================>]   49.3MB/49.3MB
 a7730063fcfe Pull complete 
 3e450a236251 Extracting [>                                                  ]  65.54kB/3.941MB
 3e450a236251 Extracting [==============>                                    ]  1.114MB/3.941MB
 3e450a236251 Extracting [================================================>  ]  3.801MB/3.941MB
 3e450a236251 Extracting [==================================================>]  3.941MB/3.941MB
 3e450a236251 Pull complete 
 play.texcraft.dev Pulled 

Success
              
Redeploy
$ docker compose up -d
 Container texcraftdev-texcraft.dev-1  Recreate
 Container texcraftdev-play.texcraft.dev-1  Recreate
 Container texcraftdev-redis-1  Running
 Container texcraftdev-texcraft.dev-1  Recreated
 Container texcraftdev-play.texcraft.dev-1  Recreated
 Container texcraftdev-texcraft.dev-1  Starting
 Container texcraftdev-play.texcraft.dev-1  Starting
 Container texcraftdev-texcraft.dev-1  Started
 Container texcraftdev-play.texcraft.dev-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping texcraft.dev
$ curl --fail-with-body -v https://texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1567 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2028 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [78 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=texcraft.dev
*  start date: Feb 20 23:30:24 2026 GMT
*  expire date: May 21 23:30:23 2026 GMT
*  subjectAltName: host "texcraft.dev" matched cert's "texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E8
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Tue, 07 Apr 2026 15:06:24 GMT
< etag: "dhn0if5xz2f4bsk-gzip"
< last-modified: Tue, 07 Apr 2026 15:02:46 GMT
< server: Caddy
< vary: Accept-Encoding
< via: 1.1 Caddy
< 
{ [5 bytes data]

100 15284    0 15284    0     0   160k      0 --:--:-- --:--:-- --:--:--  160k
* Connection #0 to host texcraft.dev left intact

Success
              
Ping play.texcraft.dev
$ curl --fail-with-body -v https://play.texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host play.texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1572 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2046 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [80 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=play.texcraft.dev
*  start date: Feb 21 13:50:24 2026 GMT
*  expire date: May 22 13:50:23 2026 GMT
*  subjectAltName: host "play.texcraft.dev" matched cert's "play.texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E7
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to play.texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://play.texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: play.texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: play.texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Tue, 07 Apr 2026 15:06:24 GMT
< via: 1.1 Caddy
< content-length: 514
< 
{ [5 bytes data]

100   514  100   514    0     0  13508      0 --:--:-- --:--:-- --:--:-- 13891
* Connection #0 to host play.texcraft.dev left intact

Success
              
boxworks tex: implement nested hlists and vlists

Build #933. Deployed 3 weeks ago.

Deployment logs
Pull
$ docker compose pull
 play.texcraft.dev Pulling 
 texcraft.dev Pulling 
 redis Pulling 
 redis Pulled 
 8f6ad858d0a4 Already exists 
 52a745ecd686 Pulling fs layer 
 589002ba0eae Already exists 
 69a0ee2ce755 Already exists 
 6304d7b2d77e Already exists 
 4638b30f6c53 Already exists 
 4f4fb700ef54 Already exists 
 cb639aa78496 Pulling fs layer 
 6d4196bbd132 Pulling fs layer 
 16443e40224e Pulling fs layer 
 16443e40224e Waiting 
 52a745ecd686 Downloading [>                                                  ]  39.99kB/3.941MB
 cb639aa78496 Downloading [==================================================>]      98B/98B
 cb639aa78496 Verifying Checksum 
 cb639aa78496 Download complete 
 cb639aa78496 Extracting [==================================================>]      98B/98B
 6d4196bbd132 Downloading [>                                                  ]  14.09kB/1.348MB
 cb639aa78496 Extracting [==================================================>]      98B/98B
 cb639aa78496 Pull complete 
 6d4196bbd132 Downloading [==================================================>]  1.348MB/1.348MB
 6d4196bbd132 Verifying Checksum 
 6d4196bbd132 Download complete 
 52a745ecd686 Verifying Checksum 
 52a745ecd686 Download complete 
 6d4196bbd132 Extracting [=>                                                 ]  32.77kB/1.348MB
 52a745ecd686 Extracting [>                                                  ]  65.54kB/3.941MB
 16443e40224e Downloading [>                                                  ]  39.66kB/3.945MB
 6d4196bbd132 Extracting [==================================================>]  1.348MB/1.348MB
 52a745ecd686 Extracting [===================>                               ]  1.573MB/3.941MB
 6d4196bbd132 Pull complete 
 16443e40224e Downloading [==================================================>]  3.945MB/3.945MB
 16443e40224e Verifying Checksum 
 16443e40224e Download complete 
 16443e40224e Extracting [>                                                  ]  65.54kB/3.945MB
 52a745ecd686 Extracting [==================================================>]  3.941MB/3.941MB
 52a745ecd686 Pull complete 
 play.texcraft.dev Pulled 
 16443e40224e Extracting [====>                                              ]  393.2kB/3.945MB
 16443e40224e Extracting [============>                                      ]    983kB/3.945MB
 16443e40224e Extracting [=======================================>           ]  3.146MB/3.945MB
 16443e40224e Extracting [============================================>      ]  3.473MB/3.945MB
 16443e40224e Extracting [=================================================> ]  3.932MB/3.945MB
 16443e40224e Extracting [==================================================>]  3.945MB/3.945MB
 16443e40224e Pull complete 
 texcraft.dev Pulled 

Success
              
Redeploy
$ docker compose up -d
 Container texcraftdev-texcraft.dev-1  Recreate
 Container texcraftdev-redis-1  Running
 Container texcraftdev-play.texcraft.dev-1  Recreate
 Container texcraftdev-texcraft.dev-1  Recreated
 Container texcraftdev-play.texcraft.dev-1  Recreated
 Container texcraftdev-texcraft.dev-1  Starting
 Container texcraftdev-play.texcraft.dev-1  Starting
 Container texcraftdev-texcraft.dev-1  Started
 Container texcraftdev-play.texcraft.dev-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping texcraft.dev
$ curl --fail-with-body -v https://texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1567 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2028 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [78 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=texcraft.dev
*  start date: Feb 20 23:30:24 2026 GMT
*  expire date: May 21 23:30:23 2026 GMT
*  subjectAltName: host "texcraft.dev" matched cert's "texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E8
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Sun, 29 Mar 2026 03:53:44 GMT
< etag: "dheykmky6w3kbsk-gzip"
< last-modified: Sun, 29 Mar 2026 03:50:17 GMT
< server: Caddy
< vary: Accept-Encoding
< via: 1.1 Caddy
< 
{ [5 bytes data]

100 15284    0 15284    0     0   272k      0 --:--:-- --:--:-- --:--:--  276k
* Connection #0 to host texcraft.dev left intact

Success
              
Ping play.texcraft.dev
$ curl --fail-with-body -v https://play.texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host play.texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1572 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2046 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [79 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=play.texcraft.dev
*  start date: Feb 21 13:50:24 2026 GMT
*  expire date: May 22 13:50:23 2026 GMT
*  subjectAltName: host "play.texcraft.dev" matched cert's "play.texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E7
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to play.texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://play.texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: play.texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: play.texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Sun, 29 Mar 2026 03:53:44 GMT
< via: 1.1 Caddy
< content-length: 514
< 
{ [5 bytes data]

100   514  100   514    0     0  13392      0 --:--:-- --:--:-- --:--:-- 13526
* Connection #0 to host play.texcraft.dev left intact

Success
              
boxworks tex: unblock support more nesting of boxes

Build #932. Deployed 3 weeks ago.

Deployment logs
Pull
$ docker compose pull
 redis Pulling 
 texcraft.dev Pulling 
 play.texcraft.dev Pulling 
 redis Pulled 
 8f6ad858d0a4 Already exists 
 65b8206f61a4 Pulling fs layer 
 589002ba0eae Already exists 
 69a0ee2ce755 Already exists 
 6304d7b2d77e Already exists 
 4638b30f6c53 Already exists 
 4f4fb700ef54 Already exists 
 8f316b21af4b Pulling fs layer 
 6e99121a4501 Pulling fs layer 
 0a356c5ccf74 Pulling fs layer 
 0a356c5ccf74 Waiting 
 65b8206f61a4 Downloading [>                                                  ]  39.63kB/3.941MB
 6e99121a4501 Downloading [>                                                  ]   14.1kB/1.348MB
 6e99121a4501 Verifying Checksum 
 6e99121a4501 Download complete 
 8f316b21af4b Downloading [==================================================>]      98B/98B
 8f316b21af4b Verifying Checksum 
 8f316b21af4b Download complete 
 65b8206f61a4 Verifying Checksum 
 65b8206f61a4 Download complete 
 8f316b21af4b Extracting [==================================================>]      98B/98B
 8f316b21af4b Extracting [==================================================>]      98B/98B
 65b8206f61a4 Extracting [>                                                  ]  65.54kB/3.941MB
 8f316b21af4b Pull complete 
 6e99121a4501 Extracting [=>                                                 ]  32.77kB/1.348MB
 65b8206f61a4 Extracting [================>                                  ]  1.311MB/3.941MB
 0a356c5ccf74 Downloading [>                                                  ]  40.03kB/3.936MB
 6e99121a4501 Extracting [==================================================>]  1.348MB/1.348MB
 0a356c5ccf74 Verifying Checksum 
 0a356c5ccf74 Download complete 
 6e99121a4501 Pull complete 
 0a356c5ccf74 Extracting [>                                                  ]  65.54kB/3.936MB
 65b8206f61a4 Extracting [===========================================>       ]  3.408MB/3.941MB
 65b8206f61a4 Extracting [==================================================>]  3.941MB/3.941MB
 65b8206f61a4 Pull complete 
 play.texcraft.dev Pulled 
 0a356c5ccf74 Extracting [======>                                            ]  524.3kB/3.936MB
 0a356c5ccf74 Extracting [==============>                                    ]  1.114MB/3.936MB
 0a356c5ccf74 Extracting [=========================================>         ]  3.277MB/3.936MB
 0a356c5ccf74 Extracting [============================================>      ]  3.473MB/3.936MB
 0a356c5ccf74 Extracting [==================================================>]  3.936MB/3.936MB
 0a356c5ccf74 Pull complete 
 texcraft.dev Pulled 

Success
              
Redeploy
$ docker compose up -d
 Container texcraftdev-redis-1  Running
 Container texcraftdev-texcraft.dev-1  Recreate
 Container texcraftdev-play.texcraft.dev-1  Recreate
 Container texcraftdev-play.texcraft.dev-1  Recreated
 Container texcraftdev-texcraft.dev-1  Recreated
 Container texcraftdev-play.texcraft.dev-1  Starting
 Container texcraftdev-texcraft.dev-1  Starting
 Container texcraftdev-texcraft.dev-1  Started
 Container texcraftdev-play.texcraft.dev-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping texcraft.dev
$ curl --fail-with-body -v https://texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1567 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2028 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [78 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=texcraft.dev
*  start date: Feb 20 23:30:24 2026 GMT
*  expire date: May 21 23:30:23 2026 GMT
*  subjectAltName: host "texcraft.dev" matched cert's "texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E8
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Sat, 28 Mar 2026 20:29:45 GMT
< etag: "dhep4yfw8x6obsk-gzip"
< last-modified: Sat, 28 Mar 2026 20:26:39 GMT
< server: Caddy
< vary: Accept-Encoding
< via: 1.1 Caddy
< 
} [5 bytes data]

100 15284    0 15284    0     0   239k      0 --:--:-- --:--:-- --:--:--  240k
* Connection #0 to host texcraft.dev left intact

Success
              
Ping play.texcraft.dev
$ curl --fail-with-body -v https://play.texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host play.texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1572 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2046 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [79 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=play.texcraft.dev
*  start date: Feb 21 13:50:24 2026 GMT
*  expire date: May 22 13:50:23 2026 GMT
*  subjectAltName: host "play.texcraft.dev" matched cert's "play.texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E7
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to play.texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://play.texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: play.texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: play.texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Sat, 28 Mar 2026 20:29:45 GMT
< via: 1.1 Caddy
< content-length: 514
< 
} [5 bytes data]

100   514  100   514    0     0  12718      0 --:--:-- --:--:-- --:--:-- 12850
* Connection #0 to host play.texcraft.dev left intact

Success
              
box CLI: add vlists builder

Build #930. Deployed 3 weeks ago.

Deployment logs
Pull
$ docker compose pull
 play.texcraft.dev Pulling 
 texcraft.dev Pulling 
 redis Pulling 
 redis Pulled 
 8f6ad858d0a4 Already exists 
 ed47620eecc9 Pulling fs layer 
 589002ba0eae Already exists 
 69a0ee2ce755 Already exists 
 6304d7b2d77e Already exists 
 4638b30f6c53 Already exists 
 4f4fb700ef54 Already exists 
 1e457a32cb44 Pulling fs layer 
 d458bbe442a7 Pulling fs layer 
 92cf902376f8 Pulling fs layer 
 92cf902376f8 Waiting 
 ed47620eecc9 Downloading [>                                                  ]  39.63kB/3.941MB
 ed47620eecc9 Verifying Checksum 
 ed47620eecc9 Download complete 
 ed47620eecc9 Extracting [>                                                  ]  65.54kB/3.941MB
 d458bbe442a7 Downloading [>                                                  ]  14.11kB/1.348MB
 1e457a32cb44 Downloading [==================================================>]      98B/98B
 1e457a32cb44 Verifying Checksum 
 1e457a32cb44 Download complete 
 1e457a32cb44 Extracting [==================================================>]      98B/98B
 1e457a32cb44 Extracting [==================================================>]      98B/98B
 d458bbe442a7 Verifying Checksum 
 d458bbe442a7 Download complete 
 1e457a32cb44 Pull complete 
 d458bbe442a7 Extracting [=>                                                 ]  32.77kB/1.348MB
 ed47620eecc9 Extracting [===============>                                   ]  1.245MB/3.941MB
 92cf902376f8 Downloading [>                                                  ]  40.12kB/3.906MB
 92cf902376f8 Verifying Checksum 
 92cf902376f8 Download complete 
 d458bbe442a7 Extracting [=================================================> ]  1.343MB/1.348MB
 ed47620eecc9 Extracting [==================================>                ]  2.687MB/3.941MB
 d458bbe442a7 Extracting [==================================================>]  1.348MB/1.348MB
 d458bbe442a7 Pull complete 
 ed47620eecc9 Extracting [==================================================>]  3.941MB/3.941MB
 92cf902376f8 Extracting [>                                                  ]  65.54kB/3.906MB
 ed47620eecc9 Pull complete 
 play.texcraft.dev Pulled 
 92cf902376f8 Extracting [=======>                                           ]  589.8kB/3.906MB
 92cf902376f8 Extracting [========================================>          ]  3.146MB/3.906MB
 92cf902376f8 Extracting [============================================>      ]  3.473MB/3.906MB
 92cf902376f8 Extracting [==================================================>]  3.906MB/3.906MB
 92cf902376f8 Extracting [==================================================>]  3.906MB/3.906MB
 92cf902376f8 Pull complete 
 texcraft.dev Pulled 

Success
              
Redeploy
$ docker compose up -d
 Container texcraftdev-redis-1  Running
 Container texcraftdev-texcraft.dev-1  Recreate
 Container texcraftdev-play.texcraft.dev-1  Recreate
 Container texcraftdev-texcraft.dev-1  Recreated
 Container texcraftdev-play.texcraft.dev-1  Recreated
 Container texcraftdev-texcraft.dev-1  Starting
 Container texcraftdev-play.texcraft.dev-1  Starting
 Container texcraftdev-texcraft.dev-1  Started
 Container texcraftdev-play.texcraft.dev-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping texcraft.dev
$ curl --fail-with-body -v https://texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1567 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2028 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [80 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=texcraft.dev
*  start date: Feb 20 23:30:24 2026 GMT
*  expire date: May 21 23:30:23 2026 GMT
*  subjectAltName: host "texcraft.dev" matched cert's "texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E8
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Sat, 28 Mar 2026 08:48:45 GMT
< etag: "dhea7pibv30gbsk-gzip"
< last-modified: Sat, 28 Mar 2026 08:44:58 GMT
< server: Caddy
< vary: Accept-Encoding
< via: 1.1 Caddy
< 
} [5 bytes data]

100 15284    0 15284    0     0   233k      0 --:--:-- --:--:-- --:--:--  236k
* Connection #0 to host texcraft.dev left intact

Success
              
Ping play.texcraft.dev
$ curl --fail-with-body -v https://play.texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host play.texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1572 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2046 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [79 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=play.texcraft.dev
*  start date: Feb 21 13:50:24 2026 GMT
*  expire date: May 22 13:50:23 2026 GMT
*  subjectAltName: host "play.texcraft.dev" matched cert's "play.texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E7
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to play.texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://play.texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: play.texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: play.texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Sat, 28 Mar 2026 08:48:45 GMT
< via: 1.1 Caddy
< content-length: 514
< 
{ [5 bytes data]

100   514  100   514    0     0   6865      0 --:--:-- --:--:-- --:--:--  6945
* Connection #0 to host play.texcraft.dev left intact

Success
              
box hlists: add E2E tests

Build #929. Deployed 3 weeks ago.

Deployment logs
Pull
$ docker compose pull
 play.texcraft.dev Pulling 
 redis Pulling 
 texcraft.dev Pulling 
 redis Pulled 
 589002ba0eae Already exists 
 8f6ad858d0a4 Already exists 
 69a0ee2ce755 Already exists 
 30e1558fda68 Pulling fs layer 
 6304d7b2d77e Already exists 
 4638b30f6c53 Already exists 
 4f4fb700ef54 Already exists 
 9a62fb677a1e Pulling fs layer 
 a03f37c45b0e Pulling fs layer 
 a55d50f0266d Pulling fs layer 
 a55d50f0266d Waiting 
 30e1558fda68 Downloading [>                                                  ]  39.61kB/3.941MB
 a03f37c45b0e Downloading [>                                                  ]  13.67kB/1.348MB
 9a62fb677a1e Downloading [==================================================>]      98B/98B
 9a62fb677a1e Verifying Checksum 
 9a62fb677a1e Download complete 
 9a62fb677a1e Extracting [==================================================>]      98B/98B
 9a62fb677a1e Extracting [==================================================>]      98B/98B
 a03f37c45b0e Verifying Checksum 
 a03f37c45b0e Download complete 
 9a62fb677a1e Pull complete 
 a03f37c45b0e Extracting [=>                                                 ]  32.77kB/1.348MB
 30e1558fda68 Verifying Checksum 
 30e1558fda68 Download complete 
 30e1558fda68 Extracting [>                                                  ]  65.54kB/3.941MB
 a03f37c45b0e Extracting [=================>                                 ]  458.8kB/1.348MB
 30e1558fda68 Extracting [=========>                                         ]  786.4kB/3.941MB
 a55d50f0266d Downloading [>                                                  ]  39.63kB/3.85MB
 a03f37c45b0e Extracting [======================================>            ]  1.049MB/1.348MB
 30e1558fda68 Extracting [===================>                               ]  1.507MB/3.941MB
 a55d50f0266d Verifying Checksum 
 a55d50f0266d Download complete 
 a03f37c45b0e Extracting [==================================================>]  1.348MB/1.348MB
 30e1558fda68 Extracting [============================>                      ]  2.228MB/3.941MB
 a03f37c45b0e Pull complete 
 a55d50f0266d Extracting [>                                                  ]  65.54kB/3.85MB
 30e1558fda68 Extracting [==================================================>]  3.941MB/3.941MB
 30e1558fda68 Pull complete 
 play.texcraft.dev Pulled 
 a55d50f0266d Extracting [====>                                              ]  327.7kB/3.85MB
 a55d50f0266d Extracting [======>                                            ]  524.3kB/3.85MB
 a55d50f0266d Extracting [===========>                                       ]    852kB/3.85MB
 a55d50f0266d Extracting [==============>                                    ]  1.114MB/3.85MB
 a55d50f0266d Extracting [==================>                                ]  1.442MB/3.85MB
 a55d50f0266d Extracting [=======================================>           ]  3.015MB/3.85MB
 a55d50f0266d Extracting [=========================================>         ]  3.211MB/3.85MB
 a55d50f0266d Extracting [============================================>      ]  3.408MB/3.85MB
 a55d50f0266d Extracting [================================================>  ]  3.736MB/3.85MB
 a55d50f0266d Extracting [==================================================>]   3.85MB/3.85MB
 a55d50f0266d Extracting [==================================================>]   3.85MB/3.85MB
 a55d50f0266d Pull complete 
 texcraft.dev Pulled 

Success
              
Redeploy
$ docker compose up -d
 Container texcraftdev-redis-1  Running
 Container texcraftdev-play.texcraft.dev-1  Recreate
 Container texcraftdev-texcraft.dev-1  Recreate
 Container texcraftdev-texcraft.dev-1  Recreated
 Container texcraftdev-play.texcraft.dev-1  Recreated
 Container texcraftdev-texcraft.dev-1  Starting
 Container texcraftdev-play.texcraft.dev-1  Starting
 Container texcraftdev-play.texcraft.dev-1  Started
 Container texcraftdev-texcraft.dev-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping texcraft.dev
$ curl --fail-with-body -v https://texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1567 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2028 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [79 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=texcraft.dev
*  start date: Feb 20 23:30:24 2026 GMT
*  expire date: May 21 23:30:23 2026 GMT
*  subjectAltName: host "texcraft.dev" matched cert's "texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E8
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Thu, 26 Mar 2026 18:41:46 GMT
< etag: "dhcxklo9a5mobsk-gzip"
< last-modified: Thu, 26 Mar 2026 18:37:54 GMT
< server: Caddy
< vary: Accept-Encoding
< via: 1.1 Caddy
< 
{ [5 bytes data]

100 15284    0 15284    0     0   200k      0 --:--:-- --:--:-- --:--:--  201k
* Connection #0 to host texcraft.dev left intact

Success
              
Ping play.texcraft.dev
$ curl --fail-with-body -v https://play.texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host play.texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1572 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2046 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [79 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=play.texcraft.dev
*  start date: Feb 21 13:50:24 2026 GMT
*  expire date: May 22 13:50:23 2026 GMT
*  subjectAltName: host "play.texcraft.dev" matched cert's "play.texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E7
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to play.texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://play.texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: play.texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: play.texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Thu, 26 Mar 2026 18:41:46 GMT
< via: 1.1 Caddy
< content-length: 514
< 
{ [5 bytes data]

100   514  100   514    0     0  11974      0 --:--:-- --:--:-- --:--:-- 11953
* Connection #0 to host play.texcraft.dev left intact

Success
              
Fix CI

Build #927. Deployed 3 weeks ago.

Deployment logs
Pull
$ docker compose pull
 texcraft.dev Pulling 
 play.texcraft.dev Pulling 
 redis Pulling 
 redis Pulled 
 8f6ad858d0a4 Already exists 
 a5544f57713e Pulling fs layer 
 589002ba0eae Already exists 
 69a0ee2ce755 Already exists 
 6304d7b2d77e Already exists 
 4638b30f6c53 Already exists 
 4f4fb700ef54 Already exists 
 e3bb7287dd2a Pulling fs layer 
 f0784e092143 Pulling fs layer 
 fbc17eab9a56 Pulling fs layer 
 fbc17eab9a56 Waiting 
 a5544f57713e Downloading [>                                                  ]  39.63kB/3.941MB
 f0784e092143 Downloading [>                                                  ]  13.67kB/1.348MB
 f0784e092143 Verifying Checksum 
 f0784e092143 Download complete 
 e3bb7287dd2a Downloading [==================================================>]      98B/98B
 e3bb7287dd2a Verifying Checksum 
 e3bb7287dd2a Download complete 
 e3bb7287dd2a Extracting [==================================================>]      98B/98B
 e3bb7287dd2a Extracting [==================================================>]      98B/98B
 a5544f57713e Verifying Checksum 
 a5544f57713e Download complete 
 a5544f57713e Extracting [>                                                  ]  65.54kB/3.941MB
 e3bb7287dd2a Pull complete 
 f0784e092143 Extracting [=>                                                 ]  32.77kB/1.348MB
 fbc17eab9a56 Downloading [>                                                  ]  39.68kB/3.844MB
 a5544f57713e Extracting [=========>                                         ]  720.9kB/3.941MB
 f0784e092143 Extracting [=====================>                             ]  589.8kB/1.348MB
 fbc17eab9a56 Downloading [===========================================>       ]  3.358MB/3.844MB
 fbc17eab9a56 Verifying Checksum 
 fbc17eab9a56 Download complete 
 a5544f57713e Extracting [==============>                                    ]   1.18MB/3.941MB
 f0784e092143 Extracting [====================================>              ]    983kB/1.348MB
 a5544f57713e Extracting [==========================>                        ]  2.097MB/3.941MB
 f0784e092143 Extracting [==================================================>]  1.348MB/1.348MB
 f0784e092143 Pull complete 
 fbc17eab9a56 Extracting [>                                                  ]  65.54kB/3.844MB
 a5544f57713e Extracting [==================================================>]  3.941MB/3.941MB
 a5544f57713e Pull complete 
 play.texcraft.dev Pulled 
 fbc17eab9a56 Extracting [====>                                              ]  327.7kB/3.844MB
 fbc17eab9a56 Extracting [=======>                                           ]  589.8kB/3.844MB
 fbc17eab9a56 Extracting [======================>                            ]  1.704MB/3.844MB
 fbc17eab9a56 Extracting [==========================================>        ]  3.277MB/3.844MB
 fbc17eab9a56 Extracting [=============================================>     ]  3.473MB/3.844MB
 fbc17eab9a56 Extracting [==================================================>]  3.844MB/3.844MB
 fbc17eab9a56 Extracting [==================================================>]  3.844MB/3.844MB
 fbc17eab9a56 Pull complete 
 texcraft.dev Pulled 

Success
              
Redeploy
$ docker compose up -d
 Container texcraftdev-texcraft.dev-1  Recreate
 Container texcraftdev-play.texcraft.dev-1  Recreate
 Container texcraftdev-redis-1  Running
 Container texcraftdev-texcraft.dev-1  Recreated
 Container texcraftdev-play.texcraft.dev-1  Recreated
 Container texcraftdev-texcraft.dev-1  Starting
 Container texcraftdev-play.texcraft.dev-1  Starting
 Container texcraftdev-play.texcraft.dev-1  Started
 Container texcraftdev-texcraft.dev-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping texcraft.dev
$ curl --fail-with-body -v https://texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1567 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2028 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [79 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=texcraft.dev
*  start date: Feb 20 23:30:24 2026 GMT
*  expire date: May 21 23:30:23 2026 GMT
*  subjectAltName: host "texcraft.dev" matched cert's "texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E8
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Thu, 26 Mar 2026 09:51:44 GMT
< etag: "dhcmbaeujw8wbsk-gzip"
< last-modified: Thu, 26 Mar 2026 09:48:32 GMT
< server: Caddy
< vary: Accept-Encoding
< via: 1.1 Caddy
< 
{ [5 bytes data]

100 15284    0 15284    0     0   264k      0 --:--:-- --:--:-- --:--:--  266k
* Connection #0 to host texcraft.dev left intact

Success
              
Ping play.texcraft.dev
$ curl --fail-with-body -v https://play.texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host play.texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1572 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2046 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [78 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=play.texcraft.dev
*  start date: Feb 21 13:50:24 2026 GMT
*  expire date: May 22 13:50:23 2026 GMT
*  subjectAltName: host "play.texcraft.dev" matched cert's "play.texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E7
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to play.texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://play.texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: play.texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: play.texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Thu, 26 Mar 2026 09:51:44 GMT
< via: 1.1 Caddy
< content-length: 514
< 
{ [5 bytes data]

100   514  100   514    0     0   6975      0 --:--:-- --:--:-- --:--:--  7041
* Connection #0 to host play.texcraft.dev left intact

Success
              
box cli: merge hlists and tex hlists commands

Build #921. Deployed 4 weeks ago.

Deployment logs
Pull
$ docker compose pull
 texcraft.dev Pulling 
 redis Pulling 
 play.texcraft.dev Pulling 
 redis Pulled 
 589002ba0eae Already exists 
 69a0ee2ce755 Already exists 
 6304d7b2d77e Already exists 
 8f6ad858d0a4 Already exists 
 4638b30f6c53 Already exists 
 2db31e13e365 Pulling fs layer 
 4f4fb700ef54 Already exists 
 6ab73c03d096 Pulling fs layer 
 30499320b417 Pulling fs layer 
 871a266ab160 Pulling fs layer 
 871a266ab160 Waiting 
 2db31e13e365 Downloading [>                                                  ]     40kB/3.946MB
 30499320b417 Downloading [>                                                  ]  13.67kB/1.348MB
 6ab73c03d096 Downloading [==================================================>]      98B/98B
 6ab73c03d096 Verifying Checksum 
 6ab73c03d096 Download complete 
 6ab73c03d096 Extracting [==================================================>]      98B/98B
 6ab73c03d096 Extracting [==================================================>]      98B/98B
 30499320b417 Verifying Checksum 
 30499320b417 Download complete 
 2db31e13e365 Verifying Checksum 
 2db31e13e365 Download complete 
 6ab73c03d096 Pull complete 
 30499320b417 Extracting [=>                                                 ]  32.77kB/1.348MB
 2db31e13e365 Extracting [>                                                  ]  65.54kB/3.946MB
 30499320b417 Extracting [============================================>      ]  1.212MB/1.348MB
 2db31e13e365 Extracting [===============>                                   ]  1.245MB/3.946MB
 871a266ab160 Downloading [>                                                  ]  31.81kB/3.106MB
 871a266ab160 Verifying Checksum 
 871a266ab160 Download complete 
 30499320b417 Extracting [==================================================>]  1.348MB/1.348MB
 2db31e13e365 Extracting [================================>                  ]  2.556MB/3.946MB
 2db31e13e365 Extracting [==================================================>]  3.946MB/3.946MB
 30499320b417 Pull complete 
 871a266ab160 Extracting [>                                                  ]  32.77kB/3.106MB
 2db31e13e365 Pull complete 
 play.texcraft.dev Pulled 
 871a266ab160 Extracting [===>                                               ]  196.6kB/3.106MB
 871a266ab160 Extracting [=======>                                           ]  458.8kB/3.106MB
 871a266ab160 Extracting [=============>                                     ]  819.2kB/3.106MB
 871a266ab160 Extracting [=======================>                           ]  1.475MB/3.106MB
 871a266ab160 Extracting [======================================>            ]  2.392MB/3.106MB
 871a266ab160 Extracting [========================================>          ]   2.49MB/3.106MB
 871a266ab160 Extracting [==========================================>        ]  2.621MB/3.106MB
 871a266ab160 Extracting [===========================================>       ]   2.72MB/3.106MB
 871a266ab160 Extracting [==================================================>]  3.106MB/3.106MB
 871a266ab160 Pull complete 
 texcraft.dev Pulled 

Success
              
Redeploy
$ docker compose up -d
 Container texcraftdev-play.texcraft.dev-1  Recreate
 Container texcraftdev-redis-1  Running
 Container texcraftdev-texcraft.dev-1  Recreate
 Container texcraftdev-texcraft.dev-1  Recreated
 Container texcraftdev-play.texcraft.dev-1  Recreated
 Container texcraftdev-texcraft.dev-1  Starting
 Container texcraftdev-play.texcraft.dev-1  Starting
 Container texcraftdev-play.texcraft.dev-1  Started
 Container texcraftdev-texcraft.dev-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping texcraft.dev
$ curl --fail-with-body -v https://texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1567 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2028 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [80 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=texcraft.dev
*  start date: Feb 20 23:30:24 2026 GMT
*  expire date: May 21 23:30:23 2026 GMT
*  subjectAltName: host "texcraft.dev" matched cert's "texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E8
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Mon, 23 Mar 2026 22:30:43 GMT
< etag: "dhaikjmuzbb4bsk-gzip"
< last-modified: Mon, 23 Mar 2026 22:27:13 GMT
< server: Caddy
< vary: Accept-Encoding
< via: 1.1 Caddy
< 
} [5 bytes data]

100 15284    0 15284    0     0   229k      0 --:--:-- --:--:-- --:--:--  229k
* Connection #0 to host texcraft.dev left intact

Success
              
Ping play.texcraft.dev
$ curl --fail-with-body -v https://play.texcraft.dev --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host play.texcraft.dev:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1572 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2046 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [79 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=play.texcraft.dev
*  start date: Feb 21 13:50:24 2026 GMT
*  expire date: May 22 13:50:23 2026 GMT
*  subjectAltName: host "play.texcraft.dev" matched cert's "play.texcraft.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E7
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to play.texcraft.dev (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://play.texcraft.dev/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: play.texcraft.dev]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: play.texcraft.dev
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Mon, 23 Mar 2026 22:30:43 GMT
< via: 1.1 Caddy
< content-length: 514
< 
{ [5 bytes data]

100   514  100   514    0     0  13654      0 --:--:-- --:--:-- --:--:-- 13891
* Connection #0 to host play.texcraft.dev left intact

Success
              
Project configuration
{
  "auth_token": "",
  "branch": "main",
  "name": "Texcraft",
  "paused": false,
  "repo": "github.com/jamespfennell/texcraft",
  "retention": 10,
  "steps": [
    {
      "name": "Pull",
      "run": "docker compose pull"
    },
    {
      "name": "Redeploy",
      "run": "docker compose up -d"
    },
    {
      "name": "Wait for 5 seconds",
      "run": "sleep 5"
    },
    {
      "name": "Ping texcraft.dev",
      "run": "curl --fail-with-body -v https://texcraft.dev --output /dev/null"
    },
    {
      "name": "Ping play.texcraft.dev",
      "run": "curl --fail-with-body -v https://play.texcraft.dev --output /dev/null"
    }
  ],
  "wait_minutes": 0,
  "working_directory": "/home/james/texcraft.dev"
}

Transiter

github.com/jamespfennell/transiter

Last deployed 10 weeks ago.

No pending deployment.

Most recent deployments
Update versions and fix CI

Build #149. Deployed 10 weeks ago.

Deployment logs
Pull
$ docker compose pull
 transiter Skipped - Image is already being pulled by transiter-docs 
 postgres Pulling 
 transiter-docs Pulling 
 postgres Pulled 
 6bc9f599b3ef Pulling fs layer 
 89edcaae7ec4 Pulling fs layer 
 40d1bde12670 Pulling fs layer 
 9fa9d3f8a300 Pulling fs layer 
 8673ba527a63 Pulling fs layer 
 9fa9d3f8a300 Waiting 
 8673ba527a63 Waiting 
 6bc9f599b3ef Downloading [>                                                  ]  486.6kB/48.48MB
 89edcaae7ec4 Downloading [>                                                  ]  252.9kB/24.04MB
 6bc9f599b3ef Downloading [=====>                                             ]  4.956MB/48.48MB
 89edcaae7ec4 Downloading [==========>                                        ]  4.964MB/24.04MB
 89edcaae7ec4 Downloading [====================>                              ]  9.655MB/24.04MB
 6bc9f599b3ef Downloading [==========>                                        ]  9.874MB/48.48MB
 40d1bde12670 Downloading [>                                                  ]  159.8kB/15.92MB
 6bc9f599b3ef Downloading [=============>                                     ]  13.34MB/48.48MB
 89edcaae7ec4 Downloading [=========================>                         ]  12.13MB/24.04MB
 40d1bde12670 Downloading [=========>                                         ]   3.17MB/15.92MB
 6bc9f599b3ef Downloading [===============>                                   ]  14.81MB/48.48MB
 89edcaae7ec4 Downloading [===============================>                   ]  15.08MB/24.04MB
 40d1bde12670 Downloading [====================>                              ]  6.493MB/15.92MB
 6bc9f599b3ef Downloading [=================>                                 ]  17.28MB/48.48MB
 89edcaae7ec4 Downloading [======================================>            ]   18.3MB/24.04MB
 40d1bde12670 Downloading [============================>                      ]  9.172MB/15.92MB
 6bc9f599b3ef Downloading [====================>                              ]  20.27MB/48.48MB
 89edcaae7ec4 Downloading [==========================================>        ]  20.53MB/24.04MB
 40d1bde12670 Downloading [=====================================>             ]  12.03MB/15.92MB
 89edcaae7ec4 Downloading [==============================================>    ]  22.52MB/24.04MB
 6bc9f599b3ef Downloading [=======================>                           ]  23.22MB/48.48MB
 89edcaae7ec4 Verifying Checksum 
 89edcaae7ec4 Download complete 
 40d1bde12670 Downloading [================================================>  ]  15.54MB/15.92MB
 40d1bde12670 Verifying Checksum 
 40d1bde12670 Download complete 
 6bc9f599b3ef Downloading [===============================>                   ]  30.12MB/48.48MB
 6bc9f599b3ef Downloading [=========================================>         ]     40MB/48.48MB
 6bc9f599b3ef Verifying Checksum 
 6bc9f599b3ef Download complete 
 9fa9d3f8a300 Downloading [>                                                  ]  7.555kB/672.5kB
 9fa9d3f8a300 Verifying Checksum 
 9fa9d3f8a300 Download complete 
 8673ba527a63 Downloading [>                                                  ]  147.6kB/14.55MB
 6bc9f599b3ef Extracting [>                                                  ]  491.5kB/48.48MB
 8673ba527a63 Downloading [========>                                          ]  2.426MB/14.55MB
 8673ba527a63 Downloading [===============>                                   ]  4.397MB/14.55MB
 6bc9f599b3ef Extracting [==>                                                ]  1.966MB/48.48MB
 8673ba527a63 Downloading [============================>                      ]  8.293MB/14.55MB
 8673ba527a63 Downloading [=================================================> ]   14.4MB/14.55MB
 8673ba527a63 Verifying Checksum 
 8673ba527a63 Download complete 
 6bc9f599b3ef Extracting [===>                                               ]  2.949MB/48.48MB
 6bc9f599b3ef Extracting [====>                                              ]  3.932MB/48.48MB
 6bc9f599b3ef Extracting [=====>                                             ]  5.407MB/48.48MB
 6bc9f599b3ef Extracting [=======>                                           ]  6.881MB/48.48MB
 6bc9f599b3ef Extracting [========>                                          ]  8.356MB/48.48MB
 6bc9f599b3ef Extracting [=========>                                         ]  9.339MB/48.48MB
 6bc9f599b3ef Extracting [==========>                                        ]   9.83MB/48.48MB
 6bc9f599b3ef Extracting [===========>                                       ]  10.81MB/48.48MB
 6bc9f599b3ef Extracting [============>                                      ]   11.8MB/48.48MB
 6bc9f599b3ef Extracting [=============>                                     ]  13.27MB/48.48MB
 6bc9f599b3ef Extracting [================>                                  ]  15.73MB/48.48MB
 6bc9f599b3ef Extracting [===================>                               ]  18.68MB/48.48MB
 6bc9f599b3ef Extracting [======================>                            ]  22.12MB/48.48MB
 6bc9f599b3ef Extracting [========================>                          ]  24.08MB/48.48MB
 6bc9f599b3ef Extracting [===========================>                       ]  26.54MB/48.48MB
 6bc9f599b3ef Extracting [============================>                      ]  27.53MB/48.48MB
 6bc9f599b3ef Extracting [================================>                  ]  31.95MB/48.48MB
 6bc9f599b3ef Extracting [===================================>               ]   34.9MB/48.48MB
 6bc9f599b3ef Extracting [======================================>            ]  36.86MB/48.48MB
 6bc9f599b3ef Extracting [========================================>          ]  38.83MB/48.48MB
 6bc9f599b3ef Extracting [==========================================>        ]   40.8MB/48.48MB
 6bc9f599b3ef Extracting [============================================>      ]  42.76MB/48.48MB
 6bc9f599b3ef Extracting [==============================================>    ]  44.73MB/48.48MB
 6bc9f599b3ef Extracting [===============================================>   ]  45.71MB/48.48MB
 6bc9f599b3ef Extracting [================================================>  ]  46.69MB/48.48MB
 6bc9f599b3ef Extracting [=================================================> ]  47.68MB/48.48MB
 6bc9f599b3ef Extracting [=================================================> ]  48.17MB/48.48MB
 6bc9f599b3ef Extracting [==================================================>]  48.48MB/48.48MB
 6bc9f599b3ef Pull complete 
 89edcaae7ec4 Extracting [>                                                  ]  262.1kB/24.04MB
 89edcaae7ec4 Extracting [=====>                                             ]  2.884MB/24.04MB
 89edcaae7ec4 Extracting [===========>                                       ]  5.505MB/24.04MB
 89edcaae7ec4 Extracting [==============>                                    ]  7.078MB/24.04MB
 89edcaae7ec4 Extracting [====================>                              ]  9.961MB/24.04MB
 89edcaae7ec4 Extracting [=========================>                         ]  12.32MB/24.04MB
 89edcaae7ec4 Extracting [==============================>                    ]  14.68MB/24.04MB
 89edcaae7ec4 Extracting [======================================>            ]  18.61MB/24.04MB
 89edcaae7ec4 Extracting [============================================>      ]  21.23MB/24.04MB
 89edcaae7ec4 Extracting [==============================================>    ]  22.28MB/24.04MB
 89edcaae7ec4 Extracting [===============================================>   ]  23.07MB/24.04MB
 89edcaae7ec4 Extracting [==================================================>]  24.04MB/24.04MB
 89edcaae7ec4 Pull complete 
 40d1bde12670 Extracting [>                                                  ]  163.8kB/15.92MB
 40d1bde12670 Extracting [=========>                                         ]  2.949MB/15.92MB
 40d1bde12670 Extracting [================>                                  ]  5.407MB/15.92MB
 40d1bde12670 Extracting [=========================>                         ]  8.028MB/15.92MB
 40d1bde12670 Extracting [=============================>                     ]  9.503MB/15.92MB
 40d1bde12670 Extracting [=================================>                 ]  10.65MB/15.92MB
 40d1bde12670 Extracting [====================================>              ]  11.63MB/15.92MB
 40d1bde12670 Extracting [===========================================>       ]  13.93MB/15.92MB
 40d1bde12670 Extracting [==================================================>]  15.92MB/15.92MB
 40d1bde12670 Pull complete 
 9fa9d3f8a300 Extracting [==>                                                ]  32.77kB/672.5kB
 9fa9d3f8a300 Extracting [==================================================>]  672.5kB/672.5kB
 9fa9d3f8a300 Extracting [==================================================>]  672.5kB/672.5kB
 9fa9d3f8a300 Pull complete 
 8673ba527a63 Extracting [>                                                  ]  163.8kB/14.55MB
 8673ba527a63 Extracting [=====>                                             ]  1.638MB/14.55MB
 8673ba527a63 Extracting [=============>                                     ]  3.932MB/14.55MB
 8673ba527a63 Extracting [=====================>                             ]   6.39MB/14.55MB
 8673ba527a63 Extracting [=================================================> ]  14.42MB/14.55MB
 8673ba527a63 Extracting [==================================================>]  14.55MB/14.55MB
 8673ba527a63 Pull complete 
 transiter-docs Pulled 

Success
              
Redeploy Transiter
$ docker compose up -d transiter
 Container transiter-transiter-1  Recreate
 Container transiter-transiter-1  Recreated
 Container transiter-transiter-1  Starting
 Container transiter-transiter-1  Started

Success
              
Redeploy Transiter docs
$ docker compose up -d transiter-docs
 Container transiter-transiter-docs-1  Recreate
 Container transiter-transiter-docs-1  Recreated
 Container transiter-transiter-docs-1  Starting
 Container transiter-transiter-docs-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping demo.transiter.dev
$ curl --fail-with-body -v https://demo.transiter.dev/systems/us-ny-subway --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 162.243.34.11:443...
* Connected to demo.transiter.dev (162.243.34.11) port 443 (#0)
* ALPN: offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2050 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [78 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=demo.transiter.dev
*  start date: Dec 23 04:39:16 2025 GMT
*  expire date: Mar 23 04:39:15 2026 GMT
*  subjectAltName: host "demo.transiter.dev" matched cert's "demo.transiter.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E7
*  SSL certificate verify ok.
} [5 bytes data]
* using HTTP/2
* h2h3 [:method: GET]
* h2h3 [:path: /systems/us-ny-subway]
* h2h3 [:scheme: https]
* h2h3 [:authority: demo.transiter.dev]
* h2h3 [user-agent: curl/7.88.1]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x5e2cb8535780)
} [5 bytes data]
> GET /systems/us-ny-subway HTTP/2
> Host: demo.transiter.dev
> user-agent: curl/7.88.1
> accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: application/json
< date: Fri, 06 Feb 2026 04:10:45 GMT
< via: 1.1 Caddy
< content-length: 982
< 
{ [5 bytes data]

100   982  100   982    0     0   4641      0 --:--:-- --:--:-- --:--:--  4632
100   982  100   982    0     0   4634      0 --:--:-- --:--:-- --:--:--  4632
* Connection #0 to host demo.transiter.dev left intact

Success
              
system: Big Blue Bus (Santa Monica CA)

Build #138. Deployed 48 weeks ago.

Deployment logs
Pull
$ docker compose pull
 transiter-docs Skipped - Image is already being pulled by transiter 
 transiter Pulling 
 postgres Pulling 
 postgres Pulled 
 cf05a52c0235 Already exists 
 63964a8518f5 Already exists 
 cb6233552428 Pulling fs layer 
 3f6c051f7dc3 Pulling fs layer 
 f77b02a2f34b Pulling fs layer 
 3f6c051f7dc3 Downloading [>                                                  ]  7.442kB/658.1kB
 3f6c051f7dc3 Downloading [==================================================>]  658.1kB/658.1kB
 3f6c051f7dc3 Verifying Checksum 
 3f6c051f7dc3 Download complete 
 f77b02a2f34b Downloading [>                                                  ]  142.9kB/13.99MB
 cb6233552428 Downloading [>                                                  ]  152.5kB/14.99MB
 f77b02a2f34b Verifying Checksum 
 f77b02a2f34b Download complete 
 cb6233552428 Downloading [==============================================>    ]  13.89MB/14.99MB
 cb6233552428 Download complete 
 cb6233552428 Extracting [>                                                  ]  163.8kB/14.99MB
 cb6233552428 Extracting [================>                                  ]  4.915MB/14.99MB
 cb6233552428 Extracting [=============================>                     ]  8.847MB/14.99MB
 cb6233552428 Extracting [==============================================>    ]  14.09MB/14.99MB
 cb6233552428 Extracting [==================================================>]  14.99MB/14.99MB
 cb6233552428 Pull complete 
 3f6c051f7dc3 Extracting [==>                                                ]  32.77kB/658.1kB
 3f6c051f7dc3 Extracting [==================================================>]  658.1kB/658.1kB
 3f6c051f7dc3 Pull complete 
 f77b02a2f34b Extracting [>                                                  ]  163.8kB/13.99MB
 f77b02a2f34b Extracting [==================>                                ]  5.243MB/13.99MB
 f77b02a2f34b Extracting [==================================================>]  13.99MB/13.99MB
 f77b02a2f34b Pull complete 
 transiter Pulled 

Success
              
Redeploy Transiter
$ docker compose up -d transiter
 Container transiter-transiter-1  Recreate
 Container transiter-transiter-1  Recreated
 Container transiter-transiter-1  Starting
 Container transiter-transiter-1  Started

Success
              
Redeploy Transiter docs
$ docker compose up -d transiter-docs
 Container transiter-transiter-docs-1  Recreate
 Container transiter-transiter-docs-1  Recreated
 Container transiter-transiter-docs-1  Starting
 Container transiter-transiter-docs-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping demo.transiter.dev
$ curl --fail-with-body -v https://demo.transiter.dev/systems/us-ny-subway --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 162.243.34.11:443...
* Connected to demo.transiter.dev (162.243.34.11) port 443 (#0)
* ALPN: offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2084 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [78 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=demo.transiter.dev
*  start date: Apr 27 18:47:59 2025 GMT
*  expire date: Jul 26 18:47:58 2025 GMT
*  subjectAltName: host "demo.transiter.dev" matched cert's "demo.transiter.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E5
*  SSL certificate verify ok.
} [5 bytes data]
* using HTTP/2
* h2h3 [:method: GET]
* h2h3 [:path: /systems/us-ny-subway]
* h2h3 [:scheme: https]
* h2h3 [:authority: demo.transiter.dev]
* h2h3 [user-agent: curl/7.88.1]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x595a760f6780)
} [5 bytes data]
> GET /systems/us-ny-subway HTTP/2
> Host: demo.transiter.dev
> user-agent: curl/7.88.1
> accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: application/json
< date: Thu, 15 May 2025 03:37:05 GMT
< via: 1.1 Caddy
< content-length: 956
< 
{ [5 bytes data]

100   956  100   956    0     0  12052      0 --:--:-- --:--:-- --:--:-- 12101
* Connection #0 to host demo.transiter.dev left intact

Success
              
system: Culver City Bus

Build #137. Deployed 48 weeks ago.

Deployment logs
Pull
$ docker compose pull
 transiter Skipped - Image is already being pulled by transiter-docs 
 transiter-docs Pulling 
 postgres Pulling 
 postgres Pulled 
 cf05a52c0235 Already exists 
 63964a8518f5 Pulling fs layer 
 7742f10b139e Pulling fs layer 
 a809d860c701 Pulling fs layer 
 778c091707dc Pulling fs layer 
 778c091707dc Waiting 
 63964a8518f5 Downloading [>                                                  ]  243.9kB/24.01MB
 7742f10b139e Downloading [>                                                  ]  151.3kB/14.99MB
 a809d860c701 Downloading [>                                                  ]  6.845kB/658.1kB
 a809d860c701 Downloading [==================================================>]  658.1kB/658.1kB
 a809d860c701 Verifying Checksum 
 a809d860c701 Download complete 
 63964a8518f5 Downloading [===================================>               ]  17.26MB/24.01MB
 7742f10b139e Downloading [====================================>              ]  10.85MB/14.99MB
 63964a8518f5 Verifying Checksum 
 63964a8518f5 Download complete 
 7742f10b139e Verifying Checksum 
 7742f10b139e Download complete 
 63964a8518f5 Extracting [>                                                  ]  262.1kB/24.01MB
 778c091707dc Downloading [>                                                  ]  140.4kB/13.99MB
 63964a8518f5 Extracting [========>                                          ]  4.194MB/24.01MB
 778c091707dc Downloading [===================================>               ]   9.95MB/13.99MB
 778c091707dc Verifying Checksum 
 778c091707dc Download complete 
 63964a8518f5 Extracting [================>                                  ]  8.126MB/24.01MB
 63964a8518f5 Extracting [===========================>                       ]  13.37MB/24.01MB
 63964a8518f5 Extracting [======================================>            ]  18.61MB/24.01MB
 63964a8518f5 Extracting [=============================================>     ]  22.02MB/24.01MB
 63964a8518f5 Extracting [=================================================> ]  23.59MB/24.01MB
 63964a8518f5 Extracting [==================================================>]  24.01MB/24.01MB
 63964a8518f5 Pull complete 
 7742f10b139e Extracting [>                                                  ]  163.8kB/14.99MB
 7742f10b139e Extracting [=============>                                     ]  4.096MB/14.99MB
 7742f10b139e Extracting [=========================>                         ]    7.7MB/14.99MB
 7742f10b139e Extracting [==================================>                ]  10.32MB/14.99MB
 7742f10b139e Extracting [==================================================>]  14.99MB/14.99MB
 7742f10b139e Pull complete 
 a809d860c701 Extracting [==>                                                ]  32.77kB/658.1kB
 a809d860c701 Extracting [==================================================>]  658.1kB/658.1kB
 a809d860c701 Pull complete 
 778c091707dc Extracting [>                                                  ]  163.8kB/13.99MB
 778c091707dc Extracting [============>                                      ]  3.604MB/13.99MB
 778c091707dc Extracting [======================>                            ]   6.39MB/13.99MB
 778c091707dc Extracting [=============================================>     ]  12.78MB/13.99MB
 778c091707dc Extracting [==================================================>]  13.99MB/13.99MB
 778c091707dc Pull complete 
 transiter-docs Pulled 

Success
              
Redeploy Transiter
$ docker compose up -d transiter
 Container transiter-transiter-1  Recreate
 Container transiter-transiter-1  Recreated
 Container transiter-transiter-1  Starting
 Container transiter-transiter-1  Started

Success
              
Redeploy Transiter docs
$ docker compose up -d transiter-docs
 Container transiter-transiter-docs-1  Recreate
 Container transiter-transiter-docs-1  Recreated
 Container transiter-transiter-docs-1  Starting
 Container transiter-transiter-docs-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping demo.transiter.dev
$ curl --fail-with-body -v https://demo.transiter.dev/systems/us-ny-subway --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 162.243.34.11:443...
* Connected to demo.transiter.dev (162.243.34.11) port 443 (#0)
* ALPN: offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2084 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [79 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=demo.transiter.dev
*  start date: Apr 27 18:47:59 2025 GMT
*  expire date: Jul 26 18:47:58 2025 GMT
*  subjectAltName: host "demo.transiter.dev" matched cert's "demo.transiter.dev"
*  issuer: C=US; O=Let's Encrypt; CN=E5
*  SSL certificate verify ok.
} [5 bytes data]
* using HTTP/2
* h2h3 [:method: GET]
* h2h3 [:path: /systems/us-ny-subway]
* h2h3 [:scheme: https]
* h2h3 [:authority: demo.transiter.dev]
* h2h3 [user-agent: curl/7.88.1]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x6125824d8780)
} [5 bytes data]
> GET /systems/us-ny-subway HTTP/2
> Host: demo.transiter.dev
> user-agent: curl/7.88.1
> accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: application/json
< date: Wed, 14 May 2025 22:01:06 GMT
< via: 1.1 Caddy
< content-length: 956
< 
{ [5 bytes data]

100   956  100   956    0     0   4967      0 --:--:-- --:--:-- --:--:--  4979
* Connection #0 to host demo.transiter.dev left intact

Success
              
Handle '/' characters in URL params (#150)

Build #135. Failed 51 weeks ago.

Deployment logs
Pull
$ /mount/docker compose pull
Failed to start command.
This is probably an error in the project configuration.
Error: No such file or directory (os error 2)
Failure
              
Project configuration
{
  "auth_token": "",
  "branch": "master",
  "name": "Transiter",
  "paused": false,
  "repo": "github.com/jamespfennell/transiter",
  "retention": 10,
  "steps": [
    {
      "name": "Pull",
      "run": "docker compose pull"
    },
    {
      "name": "Redeploy Transiter",
      "run": "docker compose up -d transiter"
    },
    {
      "name": "Redeploy Transiter docs",
      "run": "docker compose up -d transiter-docs"
    },
    {
      "name": "Wait for 5 seconds",
      "run": "sleep 5"
    },
    {
      "name": "Ping demo.transiter.dev",
      "run": "curl --fail-with-body -v https://demo.transiter.dev/systems/us-ny-subway --output /dev/null"
    }
  ],
  "wait_minutes": 0,
  "working_directory": "/home/james/transiter"
}

jpfennell.com

github.com/jamespfennell/jpfennell.com

Last deployed 5 weeks ago.

No pending deployment.

Most recent deployments
Add unionpots.nyc link

Build #19. Deployed 5 weeks ago.

Deployment logs
Pull
$ docker compose pull
 jpfennell.com Pulling 
 206356c42440 Pulling fs layer 
 75a1d70aee50 Pulling fs layer 
 a9d395129dce Pulling fs layer 
 df9da45c1db2 Pulling fs layer 
 18a071c04bd1 Pulling fs layer 
 79697674b897 Pulling fs layer 
 9eef040df109 Pulling fs layer 
 3b5519ccaf9f Pulling fs layer 
 4f4fb700ef54 Pulling fs layer 
 df9da45c1db2 Waiting 
 18a071c04bd1 Waiting 
 79697674b897 Waiting 
 9eef040df109 Waiting 
 3b5519ccaf9f Waiting 
 4f4fb700ef54 Waiting 
 75a1d70aee50 Downloading [>                                                  ]  335.9kB/33.16MB
 a9d395129dce Downloading [==============================>                    ]     389B/629B
 a9d395129dce Downloading [==================================================>]     629B/629B
 a9d395129dce Verifying Checksum 
 a9d395129dce Download complete 
 206356c42440 Downloading [>                                                  ]  302.3kB/29.78MB
 75a1d70aee50 Downloading [=====================>                             ]   14.3MB/33.16MB
 206356c42440 Downloading [======================>                            ]  13.54MB/29.78MB
 df9da45c1db2 Downloading [=====================>                             ]     409B/954B
 df9da45c1db2 Downloading [==================================================>]     954B/954B
 df9da45c1db2 Verifying Checksum 
 df9da45c1db2 Download complete 
 75a1d70aee50 Downloading [========================================>          ]  26.53MB/33.16MB
 206356c42440 Downloading [============================================>      ]  26.48MB/29.78MB
 206356c42440 Download complete 
 18a071c04bd1 Downloading [==================================================>]     403B/403B
 18a071c04bd1 Verifying Checksum 
 18a071c04bd1 Download complete 
 75a1d70aee50 Verifying Checksum 
 75a1d70aee50 Download complete 
 206356c42440 Extracting [>                                                  ]  327.7kB/29.78MB
 79697674b897 Downloading [================>                                  ]     408B/1.208kB
 79697674b897 Downloading [==================================================>]  1.208kB/1.208kB
 79697674b897 Verifying Checksum 
 79697674b897 Download complete 
 9eef040df109 Downloading [=============>                                     ]     376B/1.397kB
 9eef040df109 Downloading [==================================================>]  1.397kB/1.397kB
 9eef040df109 Verifying Checksum 
 9eef040df109 Download complete 
 4f4fb700ef54 Downloading [==================================================>]      32B/32B
 4f4fb700ef54 Verifying Checksum 
 4f4fb700ef54 Download complete 
 3b5519ccaf9f Downloading [>                                                  ]  11.27kB/1.034MB
 3b5519ccaf9f Verifying Checksum 
 3b5519ccaf9f Download complete 
 206356c42440 Extracting [====>                                              ]  2.621MB/29.78MB
 206356c42440 Extracting [==========>                                        ]  6.226MB/29.78MB
 206356c42440 Extracting [==============>                                    ]  8.847MB/29.78MB
 206356c42440 Extracting [==================>                                ]  10.81MB/29.78MB
 206356c42440 Extracting [====================>                              ]  12.45MB/29.78MB
 206356c42440 Extracting [=========================>                         ]  15.07MB/29.78MB
 206356c42440 Extracting [=============================>                     ]  17.69MB/29.78MB
 206356c42440 Extracting [===================================>               ]  20.97MB/29.78MB
 206356c42440 Extracting [========================================>          ]  24.25MB/29.78MB
 206356c42440 Extracting [============================================>      ]  26.21MB/29.78MB
 206356c42440 Extracting [==============================================>    ]  27.85MB/29.78MB
 206356c42440 Extracting [================================================>  ]  28.84MB/29.78MB
 206356c42440 Extracting [================================================>  ]  29.16MB/29.78MB
 206356c42440 Extracting [==================================================>]  29.78MB/29.78MB
 206356c42440 Pull complete 
 75a1d70aee50 Extracting [>                                                  ]  360.4kB/33.16MB
 75a1d70aee50 Extracting [=====>                                             ]  3.965MB/33.16MB
 75a1d70aee50 Extracting [============>                                      ]   8.29MB/33.16MB
 75a1d70aee50 Extracting [===================>                               ]  12.98MB/33.16MB
 75a1d70aee50 Extracting [======================>                            ]  14.78MB/33.16MB
 75a1d70aee50 Extracting [===========================>                       ]  18.02MB/33.16MB
 75a1d70aee50 Extracting [==============================>                    ]  20.19MB/33.16MB
 75a1d70aee50 Extracting [==================================>                ]  22.71MB/33.16MB
 75a1d70aee50 Extracting [=====================================>             ]  24.87MB/33.16MB
 75a1d70aee50 Extracting [==========================================>        ]  28.48MB/33.16MB
 75a1d70aee50 Extracting [==============================================>    ]  30.64MB/33.16MB
 75a1d70aee50 Extracting [================================================>  ]  32.44MB/33.16MB
 75a1d70aee50 Extracting [==================================================>]  33.16MB/33.16MB
 75a1d70aee50 Extracting [==================================================>]  33.16MB/33.16MB
 75a1d70aee50 Pull complete 
 a9d395129dce Extracting [==================================================>]     629B/629B
 a9d395129dce Extracting [==================================================>]     629B/629B
 a9d395129dce Pull complete 
 df9da45c1db2 Extracting [==================================================>]     954B/954B
 df9da45c1db2 Extracting [==================================================>]     954B/954B
 df9da45c1db2 Pull complete 
 18a071c04bd1 Extracting [==================================================>]     403B/403B
 18a071c04bd1 Extracting [==================================================>]     403B/403B
 18a071c04bd1 Pull complete 
 79697674b897 Extracting [==================================================>]  1.208kB/1.208kB
 79697674b897 Extracting [==================================================>]  1.208kB/1.208kB
 79697674b897 Pull complete 
 9eef040df109 Extracting [==================================================>]  1.397kB/1.397kB
 9eef040df109 Extracting [==================================================>]  1.397kB/1.397kB
 9eef040df109 Pull complete 
 3b5519ccaf9f Extracting [=>                                                 ]  32.77kB/1.034MB
 3b5519ccaf9f Extracting [==================================================>]  1.034MB/1.034MB
 3b5519ccaf9f Extracting [==================================================>]  1.034MB/1.034MB
 3b5519ccaf9f Pull complete 
 4f4fb700ef54 Extracting [==================================================>]      32B/32B
 4f4fb700ef54 Extracting [==================================================>]      32B/32B
 4f4fb700ef54 Pull complete 
 jpfennell.com Pulled 

Success
              
Redeploy
$ docker compose up -d
 Container jpfennellcom-jpfennell.com-1  Recreate
 Container jpfennellcom-jpfennell.com-1  Recreated
 Container jpfennellcom-jpfennell.com-1  Starting
 Container jpfennellcom-jpfennell.com-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping jpfennell.com
$ curl --fail-with-body -v https://jpfennell.com --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host jpfennell.com:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1568 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2039 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [79 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=jpfennell.com
*  start date: Feb 20 10:10:24 2026 GMT
*  expire date: May 21 10:10:23 2026 GMT
*  subjectAltName: host "jpfennell.com" matched cert's "jpfennell.com"
*  issuer: C=US; O=Let's Encrypt; CN=E7
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to jpfennell.com (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://jpfennell.com/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: jpfennell.com]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: jpfennell.com
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< accept-ranges: bytes
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html
< date: Tue, 17 Mar 2026 02:33:42 GMT
< etag: "69b80a1b-e8c"
< last-modified: Mon, 16 Mar 2026 13:48:11 GMT
< server: nginx/1.29.6
< via: 1.1 Caddy
< content-length: 3724
< 
{ [5 bytes data]

100  3724  100  3724    0     0  95843      0 --:--:-- --:--:-- --:--:-- 98000
* Connection #0 to host jpfennell.com left intact

Success
              
Project configuration
{
  "auth_token": "",
  "branch": "master",
  "name": "jpfennell.com",
  "paused": false,
  "repo": "github.com/jamespfennell/jpfennell.com",
  "retention": 10,
  "steps": [
    {
      "name": "Pull",
      "run": "docker compose pull"
    },
    {
      "name": "Redeploy",
      "run": "docker compose up -d"
    },
    {
      "name": "Wait for 5 seconds",
      "run": "sleep 5"
    },
    {
      "name": "Ping jpfennell.com",
      "run": "curl --fail-with-body -v https://jpfennell.com --output /dev/null"
    }
  ],
  "wait_minutes": 0,
  "working_directory": "/home/james/jpfennell.com"
}

realtimerail.nyc

github.com/jamespfennell/realtimerail.nyc

Last deployed 24 weeks ago.

No pending deployment.

Most recent deployments
Make status bar transparent on iOS (#57)

Build #159. Deployed 24 weeks ago.

Deployment logs
Pull
$ docker compose pull
 ui Pulling 
 38513bd72563 Pulling fs layer 
 a0a6ab141558 Pulling fs layer 
 0e86847a3920 Pulling fs layer 
 1bace2083289 Pulling fs layer 
 89df300a082a Pulling fs layer 
 35fb9ffa6621 Pulling fs layer 
 5545b08f9d26 Pulling fs layer 
 ef8cc739aa5b Pulling fs layer 
 403892722aea Pulling fs layer 
 7e2f54adf500 Pulling fs layer 
 35fb9ffa6621 Waiting 
 5545b08f9d26 Waiting 
 1bace2083289 Waiting 
 89df300a082a Waiting 
 ef8cc739aa5b Waiting 
 403892722aea Waiting 
 7e2f54adf500 Waiting 
 a0a6ab141558 Downloading [>                                                  ]  306.6kB/29.97MB
 38513bd72563 Downloading [>                                                  ]  302.4kB/29.78MB
 0e86847a3920 Downloading [==================================================>]     629B/629B
 0e86847a3920 Verifying Checksum 
 0e86847a3920 Download complete 
 38513bd72563 Downloading [===========>                                       ]   7.05MB/29.78MB
 a0a6ab141558 Downloading [==================>                                ]  11.39MB/29.97MB
 1bace2083289 Downloading [==================================================>]     955B/955B
 1bace2083289 Verifying Checksum 
 1bace2083289 Download complete 
 38513bd72563 Downloading [================================>                  ]  19.06MB/29.78MB
 a0a6ab141558 Downloading [==================================>                ]  20.63MB/29.97MB
 a0a6ab141558 Downloading [================================================>  ]  28.93MB/29.97MB
 a0a6ab141558 Verifying Checksum 
 a0a6ab141558 Download complete 
 38513bd72563 Downloading [=============================================>     ]  27.08MB/29.78MB
 38513bd72563 Download complete 
 89df300a082a Downloading [==================================================>]     404B/404B
 89df300a082a Download complete 
 35fb9ffa6621 Downloading [======================================>            ]     934B/1.209kB
 35fb9ffa6621 Downloading [==================================================>]  1.209kB/1.209kB
 35fb9ffa6621 Verifying Checksum 
 35fb9ffa6621 Download complete 
 38513bd72563 Extracting [>                                                  ]  327.7kB/29.78MB
 5545b08f9d26 Downloading [=================================>                 ]     934B/1.397kB
 5545b08f9d26 Downloading [==================================================>]  1.397kB/1.397kB
 5545b08f9d26 Verifying Checksum 
 5545b08f9d26 Download complete 
 38513bd72563 Extracting [======>                                            ]  3.932MB/29.78MB
 ef8cc739aa5b Downloading [>                                                  ]  5.476kB/452.8kB
 ef8cc739aa5b Downloading [==================================================>]  452.8kB/452.8kB
 ef8cc739aa5b Verifying Checksum 
 ef8cc739aa5b Download complete 
 38513bd72563 Extracting [=============>                                     ]  7.864MB/29.78MB
 403892722aea Downloading [==================================================>]     176B/176B
 403892722aea Verifying Checksum 
 403892722aea Download complete 
 7e2f54adf500 Downloading [==================================================>]     631B/631B
 7e2f54adf500 Verifying Checksum 
 7e2f54adf500 Download complete 
 38513bd72563 Extracting [=================>                                 ]  10.16MB/29.78MB
 38513bd72563 Extracting [====================>                              ]  12.12MB/29.78MB
 38513bd72563 Extracting [=========================>                         ]   15.4MB/29.78MB
 38513bd72563 Extracting [===============================>                   ]  18.68MB/29.78MB
 38513bd72563 Extracting [======================================>            ]  22.94MB/29.78MB
 38513bd72563 Extracting [===========================================>       ]  25.89MB/29.78MB
 38513bd72563 Extracting [============================================>      ]  26.21MB/29.78MB
 38513bd72563 Extracting [=============================================>     ]   27.2MB/29.78MB
 38513bd72563 Extracting [================================================>  ]  28.84MB/29.78MB
 38513bd72563 Extracting [=================================================> ]  29.49MB/29.78MB
 38513bd72563 Extracting [==================================================>]  29.78MB/29.78MB
 38513bd72563 Pull complete 
 a0a6ab141558 Extracting [>                                                  ]  327.7kB/29.97MB
 a0a6ab141558 Extracting [=====>                                             ]  3.277MB/29.97MB
 a0a6ab141558 Extracting [===========>                                       ]  6.881MB/29.97MB
 a0a6ab141558 Extracting [==================>                                ]  10.81MB/29.97MB
 a0a6ab141558 Extracting [=========================>                         ]  15.07MB/29.97MB
 a0a6ab141558 Extracting [================================>                  ]  19.33MB/29.97MB
 a0a6ab141558 Extracting [====================================>              ]  21.95MB/29.97MB
 a0a6ab141558 Extracting [===========================================>       ]  25.89MB/29.97MB
 a0a6ab141558 Extracting [=============================================>     ]   27.2MB/29.97MB
 a0a6ab141558 Extracting [==============================================>    ]  27.85MB/29.97MB
 a0a6ab141558 Extracting [==================================================>]  29.97MB/29.97MB
 a0a6ab141558 Pull complete 
 0e86847a3920 Extracting [==================================================>]     629B/629B
 0e86847a3920 Pull complete 
 1bace2083289 Extracting [==================================================>]     955B/955B
 1bace2083289 Extracting [==================================================>]     955B/955B
 1bace2083289 Pull complete 
 89df300a082a Extracting [==================================================>]     404B/404B
 89df300a082a Extracting [==================================================>]     404B/404B
 89df300a082a Pull complete 
 35fb9ffa6621 Extracting [==================================================>]  1.209kB/1.209kB
 35fb9ffa6621 Extracting [==================================================>]  1.209kB/1.209kB
 35fb9ffa6621 Pull complete 
 5545b08f9d26 Extracting [==================================================>]  1.397kB/1.397kB
 5545b08f9d26 Extracting [==================================================>]  1.397kB/1.397kB
 5545b08f9d26 Pull complete 
 ef8cc739aa5b Extracting [===>                                               ]  32.77kB/452.8kB
 ef8cc739aa5b Extracting [==================================================>]  452.8kB/452.8kB
 ef8cc739aa5b Extracting [==================================================>]  452.8kB/452.8kB
 ef8cc739aa5b Pull complete 
 403892722aea Extracting [==================================================>]     176B/176B
 403892722aea Extracting [==================================================>]     176B/176B
 403892722aea Pull complete 
 7e2f54adf500 Extracting [==================================================>]     631B/631B
 7e2f54adf500 Extracting [==================================================>]     631B/631B
 7e2f54adf500 Pull complete 
 ui Pulled 

Success
              
Redeploy
$ docker compose up -d
 Container realtimerailnyc-ui-1  Recreate
 Container realtimerailnyc-ui-1  Recreated
 Container realtimerailnyc-ui-1  Starting
 Container realtimerailnyc-ui-1  Started

Success
              
Handle accessibility, shuttle bus, and airplane icons (#54)

Build #153. Deployed 50 weeks ago.

Deployment logs
Pull
$ docker compose pull
 ui Pulling 
 254e724d7786 Already exists 
 913115292750 Already exists 
 3e544d53ce49 Already exists 
 4f21ed9ac0c0 Already exists 
 d38f2ef2d6f2 Already exists 
 40a6e9f4e456 Already exists 
 d3dc5ec71e9d Already exists 
 08918b0b85a9 Pulling fs layer 
 0d804759fc34 Pulling fs layer 
 3381308beb78 Pulling fs layer 
 08918b0b85a9 Downloading [>                                                  ]  4.704kB/452.7kB
 0d804759fc34 Downloading [==================================================>]     176B/176B
 0d804759fc34 Verifying Checksum 
 0d804759fc34 Download complete 
 08918b0b85a9 Download complete 
 08918b0b85a9 Extracting [===>                                               ]  32.77kB/452.7kB
 3381308beb78 Downloading [==================================================>]     629B/629B
 3381308beb78 Verifying Checksum 
 3381308beb78 Download complete 
 08918b0b85a9 Extracting [==================================================>]  452.7kB/452.7kB
 08918b0b85a9 Pull complete 
 0d804759fc34 Extracting [==================================================>]     176B/176B
 0d804759fc34 Extracting [==================================================>]     176B/176B
 0d804759fc34 Pull complete 
 3381308beb78 Extracting [==================================================>]     629B/629B
 3381308beb78 Extracting [==================================================>]     629B/629B
 3381308beb78 Pull complete 
 ui Pulled 

Success
              
Redeploy
$ docker compose up -d
 Container realtimerailnyc-ui-1  Recreate
 Container realtimerailnyc-ui-1  Recreated
 Container realtimerailnyc-ui-1  Starting
 Container realtimerailnyc-ui-1  Started

Success
              
Update about page after move from NJ to NYC

Build #150. Deployed 51 weeks ago.

Deployment logs
Pull
$ /mount/docker compose pull
 ui Pulling 
 254e724d7786 Pulling fs layer 
 913115292750 Pulling fs layer 
 3e544d53ce49 Pulling fs layer 
 4f21ed9ac0c0 Pulling fs layer 
 d38f2ef2d6f2 Pulling fs layer 
 40a6e9f4e456 Pulling fs layer 
 d3dc5ec71e9d Pulling fs layer 
 dcf703aafc35 Pulling fs layer 
 ee7ba3cbfac7 Pulling fs layer 
 a3435257b538 Pulling fs layer 
 40a6e9f4e456 Waiting 
 d3dc5ec71e9d Waiting 
 dcf703aafc35 Waiting 
 ee7ba3cbfac7 Waiting 
 a3435257b538 Waiting 
 4f21ed9ac0c0 Waiting 
 d38f2ef2d6f2 Waiting 
 3e544d53ce49 Downloading [==================================================>]     629B/629B
 3e544d53ce49 Verifying Checksum 
 3e544d53ce49 Download complete 
 913115292750 Downloading [>                                                  ]  441.6kB/44.15MB
 254e724d7786 Downloading [>                                                  ]  297.2kB/28.23MB
 913115292750 Downloading [==================>                                ]   16.5MB/44.15MB
 254e724d7786 Downloading [==============================>                    ]  17.19MB/28.23MB
 254e724d7786 Verifying Checksum 
 254e724d7786 Download complete 
 4f21ed9ac0c0 Downloading [====================================>              ]     690B/955B
 4f21ed9ac0c0 Download complete 
 913115292750 Downloading [=================================>                 ]  29.42MB/44.15MB
 913115292750 Downloading [=============================================>     ]  40.18MB/44.15MB
 254e724d7786 Extracting [>                                                  ]  294.9kB/28.23MB
 d38f2ef2d6f2 Downloading [==================================================>]     404B/404B
 d38f2ef2d6f2 Verifying Checksum 
 d38f2ef2d6f2 Download complete 
 40a6e9f4e456 Downloading [=============================>                     ]     721B/1.208kB
 40a6e9f4e456 Downloading [==================================================>]  1.208kB/1.208kB
 40a6e9f4e456 Verifying Checksum 
 40a6e9f4e456 Download complete 
 913115292750 Verifying Checksum 
 913115292750 Download complete 
 d3dc5ec71e9d Downloading [=========================>                         ]     721B/1.398kB
 d3dc5ec71e9d Downloading [==================================================>]  1.398kB/1.398kB
 d3dc5ec71e9d Verifying Checksum 
 d3dc5ec71e9d Download complete 
 254e724d7786 Extracting [====>                                              ]  2.654MB/28.23MB
 ee7ba3cbfac7 Downloading [==================================================>]     177B/177B
 ee7ba3cbfac7 Verifying Checksum 
 ee7ba3cbfac7 Download complete 
 dcf703aafc35 Downloading [>                                                  ]  4.829kB/449.2kB
 dcf703aafc35 Downloading [==================================================>]  449.2kB/449.2kB
 dcf703aafc35 Verifying Checksum 
 dcf703aafc35 Download complete 
 a3435257b538 Downloading [==================================================>]     634B/634B
 a3435257b538 Verifying Checksum 
 a3435257b538 Download complete 
 254e724d7786 Extracting [========>                                          ]  4.719MB/28.23MB
 254e724d7786 Extracting [============>                                      ]  7.078MB/28.23MB
 254e724d7786 Extracting [==============>                                    ]  8.258MB/28.23MB
 254e724d7786 Extracting [================>                                  ]  9.142MB/28.23MB
 254e724d7786 Extracting [=================>                                 ]  10.03MB/28.23MB
 254e724d7786 Extracting [===================>                               ]  11.21MB/28.23MB
 254e724d7786 Extracting [=====================>                             ]  12.39MB/28.23MB
 254e724d7786 Extracting [=========================>                         ]  14.16MB/28.23MB
 254e724d7786 Extracting [============================>                      ]  15.93MB/28.23MB
 254e724d7786 Extracting [=================================>                 ]  19.17MB/28.23MB
 254e724d7786 Extracting [=======================================>           ]  22.12MB/28.23MB
 254e724d7786 Extracting [==========================================>        ]  23.89MB/28.23MB
 254e724d7786 Extracting [============================================>      ]  25.36MB/28.23MB
 254e724d7786 Extracting [===============================================>   ]  26.84MB/28.23MB
 254e724d7786 Extracting [================================================>  ]  27.43MB/28.23MB
 254e724d7786 Extracting [==================================================>]  28.23MB/28.23MB
 254e724d7786 Pull complete 
 913115292750 Extracting [>                                                  ]  458.8kB/44.15MB
 913115292750 Extracting [=====>                                             ]  5.046MB/44.15MB
 913115292750 Extracting [===========>                                       ]  10.09MB/44.15MB
 913115292750 Extracting [=================>                                 ]  15.14MB/44.15MB
 913115292750 Extracting [=======================>                           ]  20.64MB/44.15MB
 913115292750 Extracting [==========================>                        ]   23.4MB/44.15MB
 913115292750 Extracting [=============================>                     ]  25.69MB/44.15MB
 913115292750 Extracting [==================================>                ]  30.74MB/44.15MB
 913115292750 Extracting [========================================>          ]  35.78MB/44.15MB
 913115292750 Extracting [==========================================>        ]  37.62MB/44.15MB
 913115292750 Extracting [============================================>      ]  38.99MB/44.15MB
 913115292750 Extracting [===============================================>   ]  41.75MB/44.15MB
 913115292750 Extracting [================================================>  ]  42.66MB/44.15MB
 913115292750 Extracting [==================================================>]  44.15MB/44.15MB
 913115292750 Pull complete 
 3e544d53ce49 Extracting [==================================================>]     629B/629B
 3e544d53ce49 Extracting [==================================================>]     629B/629B
 3e544d53ce49 Pull complete 
 4f21ed9ac0c0 Extracting [==================================================>]     955B/955B
 4f21ed9ac0c0 Extracting [==================================================>]     955B/955B
 4f21ed9ac0c0 Pull complete 
 d38f2ef2d6f2 Extracting [==================================================>]     404B/404B
 d38f2ef2d6f2 Extracting [==================================================>]     404B/404B
 d38f2ef2d6f2 Pull complete 
 40a6e9f4e456 Extracting [==================================================>]  1.208kB/1.208kB
 40a6e9f4e456 Extracting [==================================================>]  1.208kB/1.208kB
 40a6e9f4e456 Pull complete 
 d3dc5ec71e9d Extracting [==================================================>]  1.398kB/1.398kB
 d3dc5ec71e9d Extracting [==================================================>]  1.398kB/1.398kB
 d3dc5ec71e9d Pull complete 
 dcf703aafc35 Extracting [===>                                               ]  32.77kB/449.2kB
 dcf703aafc35 Extracting [==================================================>]  449.2kB/449.2kB
 dcf703aafc35 Extracting [==================================================>]  449.2kB/449.2kB
 dcf703aafc35 Pull complete 
 ee7ba3cbfac7 Extracting [==================================================>]     177B/177B
 ee7ba3cbfac7 Extracting [==================================================>]     177B/177B
 ee7ba3cbfac7 Pull complete 
 a3435257b538 Extracting [==================================================>]     634B/634B
 a3435257b538 Extracting [==================================================>]     634B/634B
 a3435257b538 Pull complete 
 ui Pulled 

Success
              
Redeploy
$ /mount/docker compose up -d
 Container realtimerailnyc-ui-1  Recreate
 Container realtimerailnyc-ui-1  Recreated
 Container realtimerailnyc-ui-1  Starting
 Container realtimerailnyc-ui-1  Started

Success
              
Fix logo for express 6 trains (#38)

Build #149. Failed 51 weeks ago.

Deployment logs
Pull
$ /mount/docker compose pull
Failed to start command.
This is probably an error in the project configuration.
Error: No such file or directory (os error 2)
Failure
              
Project configuration
{
  "auth_token": "",
  "branch": "master",
  "name": "realtimerail.nyc",
  "paused": false,
  "repo": "github.com/jamespfennell/realtimerail.nyc",
  "retention": 10,
  "steps": [
    {
      "name": "Pull",
      "run": "docker compose pull"
    },
    {
      "name": "Redeploy",
      "run": "docker compose up -d"
    }
  ],
  "wait_minutes": 0,
  "working_directory": "/home/james/realtimerail.nyc"
}

rollouts2.a.jpfennell.com

github.com/jamespfennell/rollouts

Last deployed 10 weeks ago.

No pending deployment.

Most recent deployments
Fix GitHub rate limit bug

Build #34. Deployed 10 weeks ago.

Deployment logs
Pull
$ docker compose pull
 rollouts1 Skipped - Image is already being pulled by rollouts2 
 rollouts2 Pulling 
 rollouts2 Pulled 

Success
              
Redeploy
$ docker compose up -d rollouts2
 Container rollouts-a-rollouts2-1  Recreate
 Container rollouts-a-rollouts2-1  Recreated
 Container rollouts-a-rollouts2-1  Starting
 Container rollouts-a-rollouts2-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping rollouts2.a.jpfennell.com
$ curl --fail-with-body -v https://rollouts2.a.jpfennell.com --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host rollouts2.a.jpfennell.com:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1580 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2063 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [80 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=rollouts2.a.jpfennell.com
*  start date: Dec 23 13:19:16 2025 GMT
*  expire date: Mar 23 13:19:15 2026 GMT
*  subjectAltName: host "rollouts2.a.jpfennell.com" matched cert's "rollouts2.a.jpfennell.com"
*  issuer: C=US; O=Let's Encrypt; CN=E7
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to rollouts2.a.jpfennell.com (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://rollouts2.a.jpfennell.com/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: rollouts2.a.jpfennell.com]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: rollouts2.a.jpfennell.com
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=UTF-8
< date: Mon, 09 Feb 2026 03:53:56 GMT
< server: tiny-http (Rust)
< via: 1.1 Caddy
< 
{ [5 bytes data]

100 91339    0 91339    0     0  2448k      0 --:--:-- --:--:-- --:--:-- 2477k
* Connection #0 to host rollouts2.a.jpfennell.com left intact

Success
              
Add GitHub etag debugging

Build #33. Deployed 10 weeks ago.

Deployment logs
Pull
$ docker compose pull
 rollouts2 Skipped - Image is already being pulled by rollouts1 
 rollouts1 Pulling 
 rollouts1 Pulled 

Success
              
Redeploy
$ docker compose up -d rollouts2
 Container rollouts-a-rollouts2-1  Recreate
 Container rollouts-a-rollouts2-1  Recreated
 Container rollouts-a-rollouts2-1  Starting
 Container rollouts-a-rollouts2-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping rollouts2.a.jpfennell.com
$ curl --fail-with-body -v https://rollouts2.a.jpfennell.com --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host rollouts2.a.jpfennell.com:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1580 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2063 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [80 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=rollouts2.a.jpfennell.com
*  start date: Dec 23 13:19:16 2025 GMT
*  expire date: Mar 23 13:19:15 2026 GMT
*  subjectAltName: host "rollouts2.a.jpfennell.com" matched cert's "rollouts2.a.jpfennell.com"
*  issuer: C=US; O=Let's Encrypt; CN=E7
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to rollouts2.a.jpfennell.com (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://rollouts2.a.jpfennell.com/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: rollouts2.a.jpfennell.com]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: rollouts2.a.jpfennell.com
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=UTF-8
< date: Mon, 09 Feb 2026 03:38:51 GMT
< server: tiny-http (Rust)
< via: 1.1 Caddy
< 
{ [5 bytes data]

100 82216    0 82216    0     0  2330k      0 --:--:-- --:--:-- --:--:-- 2361k
* Connection #0 to host rollouts2.a.jpfennell.com left intact

Success
              
Make email sending best effort

Build #32. Deployed 10 weeks ago.

Deployment logs
Pull
$ docker compose pull
 rollouts2 Skipped - Image is already being pulled by rollouts1 
 rollouts1 Pulling 
 rollouts1 Pulled 

Success
              
Redeploy
$ docker compose up -d rollouts2
 Container rollouts-a-rollouts2-1  Recreate
 Container rollouts-a-rollouts2-1  Recreated
 Container rollouts-a-rollouts2-1  Starting
 Container rollouts-a-rollouts2-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping rollouts2.a.jpfennell.com
$ curl --fail-with-body -v https://rollouts2.a.jpfennell.com --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host rollouts2.a.jpfennell.com:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1580 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2063 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [78 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=rollouts2.a.jpfennell.com
*  start date: Dec 23 13:19:16 2025 GMT
*  expire date: Mar 23 13:19:15 2026 GMT
*  subjectAltName: host "rollouts2.a.jpfennell.com" matched cert's "rollouts2.a.jpfennell.com"
*  issuer: C=US; O=Let's Encrypt; CN=E7
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to rollouts2.a.jpfennell.com (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://rollouts2.a.jpfennell.com/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: rollouts2.a.jpfennell.com]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: rollouts2.a.jpfennell.com
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=UTF-8
< date: Mon, 09 Feb 2026 01:52:46 GMT
< server: tiny-http (Rust)
< via: 1.1 Caddy
< 
{ [5 bytes data]

100 73335    0 73335    0     0  1850k      0 --:--:-- --:--:-- --:--:-- 1884k
* Connection #0 to host rollouts2.a.jpfennell.com left intact

Success
              
Fix stall/deadlock

Build #31. Deployed 10 weeks ago.

Deployment logs
Pull
$ docker compose pull
 rollouts2 Skipped - Image is already being pulled by rollouts1 
 rollouts1 Pulling 
 rollouts1 Pulled 

Success
              
Redeploy
$ docker compose up -d rollouts2
 Container rollouts-a-rollouts2-1  Recreate
 Container rollouts-a-rollouts2-1  Recreated
 Container rollouts-a-rollouts2-1  Starting
 Container rollouts-a-rollouts2-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping rollouts2.a.jpfennell.com
$ curl --fail-with-body -v https://rollouts2.a.jpfennell.com --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host rollouts2.a.jpfennell.com:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1580 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2063 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [78 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=rollouts2.a.jpfennell.com
*  start date: Dec 23 13:19:16 2025 GMT
*  expire date: Mar 23 13:19:15 2026 GMT
*  subjectAltName: host "rollouts2.a.jpfennell.com" matched cert's "rollouts2.a.jpfennell.com"
*  issuer: C=US; O=Let's Encrypt; CN=E7
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to rollouts2.a.jpfennell.com (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://rollouts2.a.jpfennell.com/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: rollouts2.a.jpfennell.com]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: rollouts2.a.jpfennell.com
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=UTF-8
< date: Fri, 06 Feb 2026 04:21:40 GMT
< server: tiny-http (Rust)
< via: 1.1 Caddy
< 
{ [5 bytes data]

100 63057    0 63057    0     0  2033k      0 --:--:-- --:--:-- --:--:-- 2052k
* Connection #0 to host rollouts2.a.jpfennell.com left intact

Success
              
fix the default poll interval

Build #30. Deployed 50 weeks ago.

Deployment logs
Pull
$ docker compose pull
 rollouts1 Skipped - Image is already being pulled by rollouts2 
 rollouts2 Pulling 
 rollouts2 Pulled 

Success
              
Redeploy
$ docker compose up -d rollouts2
 Container rollouts-a-rollouts2-1  Recreate
 Container rollouts-a-rollouts2-1  Recreated
 Container rollouts-a-rollouts2-1  Starting
 Container rollouts-a-rollouts2-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping rollouts2.a.jpfennell.com
$ curl --fail-with-body -v https://rollouts2.a.jpfennell.com --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 162.243.34.11:443...
* Connected to rollouts2.a.jpfennell.com (162.243.34.11) port 443 (#0)
* ALPN: offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2099 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [79 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=rollouts2.a.jpfennell.com
*  start date: Apr 28 14:14:24 2025 GMT
*  expire date: Jul 27 14:14:23 2025 GMT
*  subjectAltName: host "rollouts2.a.jpfennell.com" matched cert's "rollouts2.a.jpfennell.com"
*  issuer: C=US; O=Let's Encrypt; CN=E6
*  SSL certificate verify ok.
} [5 bytes data]
* using HTTP/2
* h2h3 [:method: GET]
* h2h3 [:path: /]
* h2h3 [:scheme: https]
* h2h3 [:authority: rollouts2.a.jpfennell.com]
* h2h3 [user-agent: curl/7.88.1]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x592b1d017780)
} [5 bytes data]
> GET / HTTP/2
> Host: rollouts2.a.jpfennell.com
> user-agent: curl/7.88.1
> accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=UTF-8
< date: Wed, 30 Apr 2025 13:35:59 GMT
< server: tiny-http (Rust)
< via: 1.1 Caddy
< 
{ [5 bytes data]

100 52036    0 52036    0     0   426k      0 --:--:-- --:--:-- --:--:--  427k
* Connection #0 to host rollouts2.a.jpfennell.com left intact

Success
              
Change how wait_minutes behaves on new rollouts agents

Build #29. Failed 50 weeks ago.

Deployment logs
Pull
$ docker compose pull
Failed to start command.
This is probably an error in the project configuration.
Error: No such file or directory (os error 2)
Failure
              
Fix the build

Build #28. Deployed 51 weeks ago.

Deployment logs
Pull
$ /mount/docker compose pull
 rollouts1 Skipped - Image is already being pulled by rollouts2 
 rollouts2 Pulling 
 rollouts2 Pulled 

Success
              
Redeploy
$ /mount/docker compose up -d rollouts2
 Container rollouts-a-rollouts2-1  Recreate
 Container rollouts-a-rollouts2-1  Recreated
 Container rollouts-a-rollouts2-1  Starting
 Container rollouts-a-rollouts2-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping rollouts2.a.jpfennell.com
$ curl --fail-with-body -v https://rollouts2.a.jpfennell.com --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 162.243.34.11:443...
* Connected to rollouts2.a.jpfennell.com (162.243.34.11) port 443 (#0)
* ALPN: offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2099 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [79 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=rollouts2.a.jpfennell.com
*  start date: Apr 28 14:14:24 2025 GMT
*  expire date: Jul 27 14:14:23 2025 GMT
*  subjectAltName: host "rollouts2.a.jpfennell.com" matched cert's "rollouts2.a.jpfennell.com"
*  issuer: C=US; O=Let's Encrypt; CN=E6
*  SSL certificate verify ok.
} [5 bytes data]
* using HTTP/2
* h2h3 [:method: GET]
* h2h3 [:path: /]
* h2h3 [:scheme: https]
* h2h3 [:authority: rollouts2.a.jpfennell.com]
* h2h3 [user-agent: curl/7.88.1]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x5c52f03fd780)
} [5 bytes data]
> GET / HTTP/2
> Host: rollouts2.a.jpfennell.com
> user-agent: curl/7.88.1
> accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=UTF-8
< date: Tue, 29 Apr 2025 13:17:16 GMT
< server: tiny-http (Rust)
< via: 1.1 Caddy
< content-length: 28667
< 
{ [5 bytes data]

100 28667  100 28667    0     0   298k      0 --:--:-- --:--:-- --:--:--  301k
* Connection #0 to host rollouts2.a.jpfennell.com left intact

Success
              
Update Docker image

Build #26. Failed 51 weeks ago.

Deployment logs
Pull
$ /mount/docker compose pull
Failed to start command.
This is probably an error in the project configuration.
Error: No such file or directory (os error 2)
Failure
              
Project configuration
{
  "auth_token": "",
  "branch": "main",
  "name": "rollouts2.a.jpfennell.com",
  "paused": false,
  "repo": "github.com/jamespfennell/rollouts",
  "retention": 10,
  "steps": [
    {
      "name": "Pull",
      "run": "docker compose pull"
    },
    {
      "name": "Redeploy",
      "run": "docker compose up -d rollouts2"
    },
    {
      "name": "Wait for 5 seconds",
      "run": "sleep 5"
    },
    {
      "name": "Ping rollouts2.a.jpfennell.com",
      "run": "curl --fail-with-body -v https://rollouts2.a.jpfennell.com --output /dev/null"
    }
  ],
  "wait_minutes": 10,
  "working_directory": "/home/james/rollouts-a"
}

unionpots.nyc

github.com/jamespfennell/unionpots.nyc

Last deployed 5 weeks ago.

No pending deployment.

Most recent deployments
Add basic decription

Build #4. Deployed 5 weeks ago.

Deployment logs
Pull
$ docker compose pull
 jpfennell.com Pulling 
 589002ba0eae Already exists 
 69a0ee2ce755 Already exists 
 6304d7b2d77e Already exists 
 4638b30f6c53 Already exists 
 4f4fb700ef54 Already exists 
 27f0c6d37158 Pulling fs layer 
 99173df8e8f1 Pulling fs layer 
 99173df8e8f1 Downloading [====================================>              ]     422B/578B
 99173df8e8f1 Downloading [==================================================>]     578B/578B
 99173df8e8f1 Verifying Checksum 
 99173df8e8f1 Download complete 
 27f0c6d37158 Downloading [==================================================>]     103B/103B
 27f0c6d37158 Verifying Checksum 
 27f0c6d37158 Download complete 
 27f0c6d37158 Extracting [==================================================>]     103B/103B
 27f0c6d37158 Extracting [==================================================>]     103B/103B
 27f0c6d37158 Pull complete 
 99173df8e8f1 Extracting [==================================================>]     578B/578B
 99173df8e8f1 Extracting [==================================================>]     578B/578B
 99173df8e8f1 Pull complete 
 jpfennell.com Pulled 

Success
              
Redeploy
$ docker compose up -d
 Container unionpotsnyc-jpfennell.com-1  Recreate
 Container unionpotsnyc-jpfennell.com-1  Recreated
 Container unionpotsnyc-jpfennell.com-1  Starting
 Container unionpotsnyc-jpfennell.com-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping unionpots.nyc
$ curl --fail-with-body -v https://unionpots.nyc --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host unionpots.nyc:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1568 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2037 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [78 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=unionpots.nyc
*  start date: Feb 23 04:36:45 2026 GMT
*  expire date: May 24 04:36:44 2026 GMT
*  subjectAltName: host "unionpots.nyc" matched cert's "unionpots.nyc"
*  issuer: C=US; O=Let's Encrypt; CN=E8
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to unionpots.nyc (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://unionpots.nyc/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: unionpots.nyc]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: unionpots.nyc
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Mon, 16 Mar 2026 13:42:23 GMT
< etag: "dh4905edss1sle-gzip"
< last-modified: Mon, 16 Mar 2026 13:41:25 GMT
< server: Caddy
< vary: Accept-Encoding
< via: 1.1 Caddy
< 
} [5 bytes data]

100   770    0   770    0     0  16658      0 --:--:-- --:--:-- --:--:-- 16739
* Connection #0 to host unionpots.nyc left intact

Success
              
Testing full E2E CI and rollouts

Build #3. Deployed 5 weeks ago.

Deployment logs
Pull
$ docker compose pull
 jpfennell.com Pulling 
 589002ba0eae Already exists 
 69a0ee2ce755 Already exists 
 6304d7b2d77e Already exists 
 4638b30f6c53 Already exists 
 4f4fb700ef54 Already exists 
 809503be270f Pulling fs layer 
 0f744e571e3f Pulling fs layer 
 809503be270f Downloading [==================================================>]     103B/103B
 809503be270f Verifying Checksum 
 809503be270f Download complete 
 809503be270f Extracting [==================================================>]     103B/103B
 809503be270f Extracting [==================================================>]     103B/103B
 0f744e571e3f Downloading [==================================================>]     305B/305B
 0f744e571e3f Verifying Checksum 
 0f744e571e3f Download complete 
 809503be270f Pull complete 
 0f744e571e3f Extracting [==================================================>]     305B/305B
 0f744e571e3f Extracting [==================================================>]     305B/305B
 0f744e571e3f Pull complete 
 jpfennell.com Pulled 

Success
              
Redeploy
$ docker compose up -d
 Container unionpotsnyc-jpfennell.com-1  Recreate
 Container unionpotsnyc-jpfennell.com-1  Recreated
 Container unionpotsnyc-jpfennell.com-1  Starting
 Container unionpotsnyc-jpfennell.com-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping unionpots.nyc
$ curl --fail-with-body -v https://unionpots.nyc --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host unionpots.nyc:443 was resolved.
* IPv6: (none)
* IPv4: 162.243.34.11
*   Trying 162.243.34.11:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1568 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2037 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [79 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=unionpots.nyc
*  start date: Feb 23 04:36:45 2026 GMT
*  expire date: May 24 04:36:44 2026 GMT
*  subjectAltName: host "unionpots.nyc" matched cert's "unionpots.nyc"
*  issuer: C=US; O=Let's Encrypt; CN=E8
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to unionpots.nyc (162.243.34.11) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://unionpots.nyc/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: unionpots.nyc]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.14.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET / HTTP/2
> Host: unionpots.nyc
> User-Agent: curl/8.14.1
> Accept: */*
> 
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200 
< accept-ranges: bytes
< alt-svc: h3=":443"; ma=2592000
< content-type: text/html; charset=utf-8
< date: Mon, 16 Mar 2026 03:39:22 GMT
< etag: "dh3vxi1j9ips71"
< last-modified: Mon, 16 Mar 2026 03:26:43 GMT
< server: Caddy
< vary: Accept-Encoding
< via: 1.1 Caddy
< content-length: 253
< 
{ [5 bytes data]

100   253  100   253    0     0   5121      0 --:--:-- --:--:-- --:--:--  5163
* Connection #0 to host unionpots.nyc left intact

Success
              
Project configuration
{
  "auth_token": "",
  "branch": "main",
  "name": "unionpots.nyc",
  "paused": false,
  "repo": "github.com/jamespfennell/unionpots.nyc",
  "retention": 10,
  "steps": [
    {
      "name": "Pull",
      "run": "docker compose pull"
    },
    {
      "name": "Redeploy",
      "run": "docker compose up -d"
    },
    {
      "name": "Wait for 5 seconds",
      "run": "sleep 5"
    },
    {
      "name": "Ping unionpots.nyc",
      "run": "curl --fail-with-body -v https://unionpots.nyc --output /dev/null"
    }
  ],
  "wait_minutes": 0,
  "working_directory": "/home/james/unionpots.nyc"
}

GitHub client

Rate limiting data

resource used/limit resetting
core 0/60 in 59 minutes