Rollouts agent

rollouts1.b.jpfennell.com

github.com/jamespfennell/rollouts

Projects

Hoard (hoard2.subwaydata.nyc)

github.com/jamespfennell/hoard

Last deployed 2 weeks ago.

No pending deployment.

Most recent deployments
Add some task metrics

Build #82. Deployed 2 weeks ago.

Deployment logs
Pull
$ docker compose pull
 hoard Pulling 
 ef235bf1a09a Already exists 
 954d6059ca7b Already exists 
 38f6600af9a9 Pulling fs layer 
 be3746aef2ce Pulling fs layer 
 be3746aef2ce Downloading [==================================================>]      95B/95B
 be3746aef2ce Verifying Checksum 
 be3746aef2ce Download complete 
 38f6600af9a9 Downloading [>                                                  ]  144.5kB/14.21MB
 38f6600af9a9 Downloading [=============================>                     ]  8.402MB/14.21MB
 38f6600af9a9 Verifying Checksum 
 38f6600af9a9 Download complete 
 38f6600af9a9 Extracting [>                                                  ]  163.8kB/14.21MB
 38f6600af9a9 Extracting [=======>                                           ]   2.13MB/14.21MB
 38f6600af9a9 Extracting [=============>                                     ]  3.768MB/14.21MB
 38f6600af9a9 Extracting [===================>                               ]  5.571MB/14.21MB
 38f6600af9a9 Extracting [=========================>                         ]  7.209MB/14.21MB
 38f6600af9a9 Extracting [==============================================>    ]  13.27MB/14.21MB
 38f6600af9a9 Extracting [==================================================>]  14.21MB/14.21MB
 38f6600af9a9 Pull complete 
 be3746aef2ce Extracting [==================================================>]      95B/95B
 be3746aef2ce Extracting [==================================================>]      95B/95B
 be3746aef2ce Pull complete 
 hoard Pulled 

Success
              
Redeploy
$ docker compose up -d hoard
 Container hoard-bc-hoard-1  Recreate
 Container hoard-bc-hoard-1  Recreated
 Container hoard-bc-hoard-1  Starting
 Container hoard-bc-hoard-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping hoard2.subwaydata.nyc
$ curl --fail-with-body -v https://hoard2.subwaydata.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 hoard2.subwaydata.nyc:443 was resolved.
* IPv6: (none)
* IPv4: 143.198.173.239
*   Trying 143.198.173.239:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1576 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):
{ [2064 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=hoard2.subwaydata.nyc
*  start date: Dec 27 08:35:37 2025 GMT
*  expire date: Mar 27 08:35:36 2026 GMT
*  subjectAltName: host "hoard2.subwaydata.nyc" matched cert's "hoard2.subwaydata.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 hoard2.subwaydata.nyc (143.198.173.239) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://hoard2.subwaydata.nyc/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: hoard2.subwaydata.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: hoard2.subwaydata.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: Sat, 07 Feb 2026 14:05:02 GMT
< via: 1.1 Caddy
< 
} [5 bytes data]

100  8169    0  8169    0     0  57216      0 --:--:-- --:--:-- --:--:-- 57528
* Connection #0 to host hoard2.subwaydata.nyc left intact

Success
              
Spread out task load more

Build #81. Deployed 2 weeks ago.

Deployment logs
Pull
$ docker compose pull
 hoard Pulling 
 ef235bf1a09a Already exists 
 954d6059ca7b Already exists 
 5e64454da3cf Pulling fs layer 
 0c6f1687e05e Pulling fs layer 
 0c6f1687e05e Downloading [==================================================>]      95B/95B
 0c6f1687e05e Verifying Checksum 
 0c6f1687e05e Download complete 
 5e64454da3cf Downloading [>                                                  ]  143.8kB/14.17MB
 5e64454da3cf Downloading [==============================>                    ]   8.72MB/14.17MB
 5e64454da3cf Verifying Checksum 
 5e64454da3cf Download complete 
 5e64454da3cf Extracting [>                                                  ]  163.8kB/14.17MB
 5e64454da3cf Extracting [==========>                                        ]  2.949MB/14.17MB
 5e64454da3cf Extracting [====================>                              ]  5.734MB/14.17MB
 5e64454da3cf Extracting [=========================================>         ]   11.8MB/14.17MB
 5e64454da3cf Extracting [==================================================>]  14.17MB/14.17MB
 5e64454da3cf Pull complete 
 0c6f1687e05e Extracting [==================================================>]      95B/95B
 0c6f1687e05e Extracting [==================================================>]      95B/95B
 0c6f1687e05e Pull complete 
 hoard Pulled 

Success
              
Redeploy
$ docker compose up -d hoard
 Container hoard-bc-hoard-1  Recreate
 Container hoard-bc-hoard-1  Recreated
 Container hoard-bc-hoard-1  Starting
 Container hoard-bc-hoard-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping hoard2.subwaydata.nyc
$ curl --fail-with-body -v https://hoard2.subwaydata.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*   Trying 143.198.173.239:443...
* Connected to hoard2.subwaydata.nyc (143.198.173.239) 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):
{ [2064 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=hoard2.subwaydata.nyc
*  start date: Dec 27 08:35:37 2025 GMT
*  expire date: Mar 27 08:35:36 2026 GMT
*  subjectAltName: host "hoard2.subwaydata.nyc" matched cert's "hoard2.subwaydata.nyc"
*  issuer: C=US; O=Let's Encrypt; CN=E8
*  SSL certificate verify ok.
} [5 bytes data]
* using HTTP/2
* h2h3 [:method: GET]
* h2h3 [:path: /]
* h2h3 [:scheme: https]
* h2h3 [:authority: hoard2.subwaydata.nyc]
* h2h3 [user-agent: curl/7.88.1]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x592b6e64c780)
} [5 bytes data]
> GET / HTTP/2
> Host: hoard2.subwaydata.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: text/html; charset=utf-8
< date: Thu, 05 Feb 2026 03:23:45 GMT
< via: 1.1 Caddy
< 
{ [5 bytes data]

100  8169    0  8169    0     0  58409      0 --:--:-- --:--:-- --:--:-- 58769
* Connection #0 to host hoard2.subwaydata.nyc left intact

Success
              
Fix bug in tmp directory creation

Build #80. Deployed 2 weeks ago.

Deployment logs
Pull
$ docker compose pull
 hoard Pulling 
 ef235bf1a09a Pulling fs layer 
 954d6059ca7b Pulling fs layer 
 3e1d8bcfe61c Pulling fs layer 
 281331af6314 Pulling fs layer 
 281331af6314 Waiting 
 ef235bf1a09a Downloading [>                                                  ]  495.4kB/49.29MB
 3e1d8bcfe61c Downloading [>                                                  ]  144.5kB/14.17MB
 954d6059ca7b Downloading [>                                                  ]  265.4kB/25.61MB
 ef235bf1a09a Downloading [========>                                          ]  8.525MB/49.29MB
 3e1d8bcfe61c Downloading [==================>                                ]  5.365MB/14.17MB
 954d6059ca7b Downloading [==========>                                        ]   5.54MB/25.61MB
 ef235bf1a09a Downloading [===============>                                   ]  15.07MB/49.29MB
 3e1d8bcfe61c Downloading [=======================================>           ]  11.31MB/14.17MB
 954d6059ca7b Downloading [======================>                            ]  11.59MB/25.61MB
 ef235bf1a09a Downloading [====================>                              ]   20.1MB/49.29MB
 3e1d8bcfe61c Verifying Checksum 
 3e1d8bcfe61c Download complete 
 954d6059ca7b Downloading [=================================>                 ]  17.13MB/25.61MB
 ef235bf1a09a Downloading [==============================>                    ]  30.16MB/49.29MB
 954d6059ca7b Downloading [======================================>            ]  19.52MB/25.61MB
 954d6059ca7b Verifying Checksum 
 954d6059ca7b Download complete 
 ef235bf1a09a Downloading [=====================================>             ]  37.18MB/49.29MB
 281331af6314 Downloading [==================================================>]      95B/95B
 281331af6314 Verifying Checksum 
 281331af6314 Download complete 
 ef235bf1a09a Downloading [===============================================>   ]  47.22MB/49.29MB
 ef235bf1a09a Verifying Checksum 
 ef235bf1a09a Download complete 
 ef235bf1a09a Extracting [>                                                  ]  524.3kB/49.29MB
 ef235bf1a09a Extracting [===>                                               ]  3.146MB/49.29MB
 ef235bf1a09a Extracting [=====>                                             ]  5.243MB/49.29MB
 ef235bf1a09a Extracting [=======>                                           ]   7.34MB/49.29MB
 ef235bf1a09a Extracting [=========>                                         ]  9.437MB/49.29MB
 ef235bf1a09a Extracting [===========>                                       ]  11.01MB/49.29MB
 ef235bf1a09a Extracting [============>                                      ]  12.58MB/49.29MB
 ef235bf1a09a Extracting [===============>                                   ]   15.2MB/49.29MB
 ef235bf1a09a Extracting [==================>                                ]  17.83MB/49.29MB
 ef235bf1a09a Extracting [====================>                              ]  20.45MB/49.29MB
 ef235bf1a09a Extracting [======================>                            ]  22.54MB/49.29MB
 ef235bf1a09a Extracting [=========================>                         ]  25.17MB/49.29MB
 ef235bf1a09a Extracting [==========================>                        ]  26.21MB/49.29MB
 ef235bf1a09a Extracting [============================>                      ]  28.31MB/49.29MB
 ef235bf1a09a Extracting [===============================>                   ]  31.46MB/49.29MB
 ef235bf1a09a Extracting [===================================>               ]  35.13MB/49.29MB
 ef235bf1a09a Extracting [=====================================>             ]   36.7MB/49.29MB
 ef235bf1a09a Extracting [======================================>            ]  38.27MB/49.29MB
 ef235bf1a09a Extracting [========================================>          ]  40.37MB/49.29MB
 ef235bf1a09a Extracting [===========================================>       ]  42.47MB/49.29MB
 ef235bf1a09a Extracting [=============================================>     ]  44.56MB/49.29MB
 ef235bf1a09a Extracting [==============================================>    ]  46.14MB/49.29MB
 ef235bf1a09a Extracting [===============================================>   ]  47.19MB/49.29MB
 ef235bf1a09a Extracting [================================================>  ]  48.23MB/49.29MB
 ef235bf1a09a Extracting [=================================================> ]  48.76MB/49.29MB
 ef235bf1a09a Extracting [=================================================> ]  49.28MB/49.29MB
 ef235bf1a09a Extracting [==================================================>]  49.29MB/49.29MB
 ef235bf1a09a Pull complete 
 954d6059ca7b Extracting [>                                                  ]  262.1kB/25.61MB
 954d6059ca7b Extracting [=====>                                             ]  2.621MB/25.61MB
 954d6059ca7b Extracting [==========>                                        ]  5.243MB/25.61MB
 954d6059ca7b Extracting [===============>                                   ]  8.126MB/25.61MB
 954d6059ca7b Extracting [====================>                              ]  10.75MB/25.61MB
 954d6059ca7b Extracting [=========================>                         ]  13.11MB/25.61MB
 954d6059ca7b Extracting [==============================>                    ]  15.47MB/25.61MB
 954d6059ca7b Extracting [==================================>                ]  17.56MB/25.61MB
 954d6059ca7b Extracting [====================================>              ]  18.61MB/25.61MB
 954d6059ca7b Extracting [========================================>          ]  20.97MB/25.61MB
 954d6059ca7b Extracting [============================================>      ]  22.81MB/25.61MB
 954d6059ca7b Extracting [===============================================>   ]  24.38MB/25.61MB
 954d6059ca7b Extracting [==================================================>]  25.61MB/25.61MB
 954d6059ca7b Pull complete 
 3e1d8bcfe61c Extracting [>                                                  ]  163.8kB/14.17MB
 3e1d8bcfe61c Extracting [========>                                          ]  2.458MB/14.17MB
 3e1d8bcfe61c Extracting [===============>                                   ]  4.424MB/14.17MB
 3e1d8bcfe61c Extracting [==============================>                    ]  8.684MB/14.17MB
 3e1d8bcfe61c Extracting [==================================================>]  14.17MB/14.17MB
 3e1d8bcfe61c Pull complete 
 281331af6314 Extracting [==================================================>]      95B/95B
 281331af6314 Extracting [==================================================>]      95B/95B
 281331af6314 Pull complete 
 hoard Pulled 

Success
              
Redeploy
$ docker compose up -d hoard
 Container hoard-bc-hoard-1  Recreate
 Container hoard-bc-hoard-1  Recreated
 Container hoard-bc-hoard-1  Starting
 Container hoard-bc-hoard-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping hoard2.subwaydata.nyc
$ curl --fail-with-body -v https://hoard2.subwaydata.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*   Trying 143.198.173.239:443...
* Connected to hoard2.subwaydata.nyc (143.198.173.239) 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):
{ [2064 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=hoard2.subwaydata.nyc
*  start date: Dec 27 08:35:37 2025 GMT
*  expire date: Mar 27 08:35:36 2026 GMT
*  subjectAltName: host "hoard2.subwaydata.nyc" matched cert's "hoard2.subwaydata.nyc"
*  issuer: C=US; O=Let's Encrypt; CN=E8
*  SSL certificate verify ok.
} [5 bytes data]
* using HTTP/2
* h2h3 [:method: GET]
* h2h3 [:path: /]
* h2h3 [:scheme: https]
* h2h3 [:authority: hoard2.subwaydata.nyc]
* h2h3 [user-agent: curl/7.88.1]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x5d2703863780)
} [5 bytes data]
> GET / HTTP/2
> Host: hoard2.subwaydata.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: text/html; charset=utf-8
< date: Thu, 05 Feb 2026 00:40:51 GMT
< via: 1.1 Caddy
< 
{ [5 bytes data]

100  8169    0  8169    0     0  82474      0 --:--:-- --:--:-- --:--:-- 83357
* Connection #0 to host hoard2.subwaydata.nyc left intact

Success
              
Remove unused config options

Build #77. Deployed 40 weeks ago.

Deployment logs
Pull
$ docker compose pull
 hoard Pulling 
 cf05a52c0235 Already exists 
 63964a8518f5 Pulling fs layer 
 52a890f58f8f Pulling fs layer 
 da8e6839c30a Pulling fs layer 
 63964a8518f5 Downloading [>                                                  ]  245.2kB/24.01MB
 63964a8518f5 Downloading [===============>                                   ]  7.642MB/24.01MB
 da8e6839c30a Downloading [==================================================>]      95B/95B
 da8e6839c30a Verifying Checksum 
 da8e6839c30a Download complete 
 63964a8518f5 Downloading [============================================>      ]  21.22MB/24.01MB
 63964a8518f5 Verifying Checksum 
 63964a8518f5 Download complete 
 52a890f58f8f Downloading [>                                                  ]  143.4kB/14.13MB
 63964a8518f5 Extracting [>                                                  ]  262.1kB/24.01MB
 52a890f58f8f Downloading [===============>                                   ]  4.366MB/14.13MB
 63964a8518f5 Extracting [===>                                               ]  1.573MB/24.01MB
 52a890f58f8f Downloading [=========================================>         ]  11.77MB/14.13MB
 52a890f58f8f Verifying Checksum 
 52a890f58f8f Download complete 
 63964a8518f5 Extracting [========>                                          ]  4.194MB/24.01MB
 63964a8518f5 Extracting [===============>                                   ]   7.34MB/24.01MB
 63964a8518f5 Extracting [=====================>                             ]  10.22MB/24.01MB
 63964a8518f5 Extracting [===========================>                       ]  13.37MB/24.01MB
 63964a8518f5 Extracting [======================================>            ]  18.35MB/24.01MB
 63964a8518f5 Extracting [===========================================>       ]  20.71MB/24.01MB
 63964a8518f5 Extracting [===============================================>   ]  22.81MB/24.01MB
 63964a8518f5 Extracting [================================================>  ]  23.33MB/24.01MB
 63964a8518f5 Extracting [==================================================>]  24.01MB/24.01MB
 63964a8518f5 Pull complete 
 52a890f58f8f Extracting [>                                                  ]  163.8kB/14.13MB
 52a890f58f8f Extracting [=>                                                 ]  327.7kB/14.13MB
 52a890f58f8f Extracting [===========>                                       ]  3.113MB/14.13MB
 52a890f58f8f Extracting [====================>                              ]  5.898MB/14.13MB
 52a890f58f8f Extracting [=====================================>             ]  10.49MB/14.13MB
 52a890f58f8f Extracting [==================================================>]  14.13MB/14.13MB
 52a890f58f8f Pull complete 
 da8e6839c30a Extracting [==================================================>]      95B/95B
 da8e6839c30a Extracting [==================================================>]      95B/95B
 da8e6839c30a Pull complete 
 hoard Pulled 

Success
              
Redeploy
$ docker compose up -d hoard
 Container hoard-bc-hoard-1  Recreate
 Container hoard-bc-hoard-1  Recreated
 Container hoard-bc-hoard-1  Starting
 Container hoard-bc-hoard-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping hoard2.subwaydata.nyc
$ curl --fail-with-body -v https://hoard2.subwaydata.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*   Trying 143.198.173.239:443...
* Connected to hoard2.subwaydata.nyc (143.198.173.239) 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):
{ [2090 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=hoard2.subwaydata.nyc
*  start date: May  1 12:02:04 2025 GMT
*  expire date: Jul 30 12:02:03 2025 GMT
*  subjectAltName: host "hoard2.subwaydata.nyc" matched cert's "hoard2.subwaydata.nyc"
*  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: hoard2.subwaydata.nyc]
* h2h3 [user-agent: curl/7.88.1]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x5b9dba4f6780)
} [5 bytes data]
> GET / HTTP/2
> Host: hoard2.subwaydata.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: text/html; charset=utf-8
< date: Sun, 18 May 2025 19:50:14 GMT
< via: 1.1 Caddy
< 
{ [5 bytes data]

100  8169    0  8169    0     0   109k      0 --:--:-- --:--:-- --:--:--  110k
* Connection #0 to host hoard2.subwaydata.nyc left intact

Success
              
Don't merge remote AFiles during upload

Build #75. Deployed 42 weeks ago.

Deployment logs
Pull
$ docker compose pull
 hoard Pulling 
 hoard Pulled 

Success
              
Redeploy
$ docker compose up -d hoard
 Container hoard-bc-hoard-1  Running

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping hoard2.subwaydata.nyc
$ curl --fail-with-body -v https://hoard2.subwaydata.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*   Trying 165.22.34.199:443...
* Connected to hoard2.subwaydata.nyc (165.22.34.199) 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):
{ [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=hoard2.subwaydata.nyc
*  start date: Apr  7 14:38:31 2025 GMT
*  expire date: Jul  6 14:38:30 2025 GMT
*  subjectAltName: host "hoard2.subwaydata.nyc" matched cert's "hoard2.subwaydata.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: /]
* h2h3 [:scheme: https]
* h2h3 [:authority: hoard2.subwaydata.nyc]
* h2h3 [user-agent: curl/7.88.1]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x571a5a615780)
} [5 bytes data]
> GET / HTTP/2
> Host: hoard2.subwaydata.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: text/html; charset=utf-8
< date: Thu, 01 May 2025 13:02:39 GMT
< vary: Accept-Encoding
< via: 2.0 Caddy
< via: 1.1 Caddy
< 
{ [5 bytes data]

100  8206    0  8206    0     0  53817      0 --:--:-- --:--:-- --:--:-- 53986
* Connection #0 to host hoard2.subwaydata.nyc left intact

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

rollouts2.b.jpfennell.com

github.com/jamespfennell/rollouts

Last deployed 14 days ago.

No pending deployment.

Most recent deployments
Fix GitHub rate limit bug

Build #34. Deployed 14 days 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-b-rollouts2-1  Recreate
 Container rollouts-b-rollouts2-1  Recreated
 Container rollouts-b-rollouts2-1  Starting
 Container rollouts-b-rollouts2-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping rollouts2.b.jpfennell.com
$ curl --fail-with-body -v https://rollouts2.b.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.b.jpfennell.com:443 was resolved.
* IPv6: (none)
* IPv4: 143.198.173.239
*   Trying 143.198.173.239: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):
{ [2072 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=rollouts2.b.jpfennell.com
*  start date: Dec 26 11:05:37 2025 GMT
*  expire date: Mar 26 11:05:36 2026 GMT
*  subjectAltName: host "rollouts2.b.jpfennell.com" matched cert's "rollouts2.b.jpfennell.com"
*  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 rollouts2.b.jpfennell.com (143.198.173.239) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://rollouts2.b.jpfennell.com/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: rollouts2.b.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.b.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:54:46 GMT
< server: tiny-http (Rust)
< via: 1.1 Caddy
< 
{ [5 bytes data]

100 45090    0 45090    0     0  1078k      0 --:--:-- --:--:-- --:--:-- 1100k
* Connection #0 to host rollouts2.b.jpfennell.com left intact

Success
              
Add GitHub etag debugging

Build #33. Deployed 14 days 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-b-rollouts2-1  Recreate
 Container rollouts-b-rollouts2-1  Recreated
 Container rollouts-b-rollouts2-1  Starting
 Container rollouts-b-rollouts2-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping rollouts2.b.jpfennell.com
$ curl --fail-with-body -v https://rollouts2.b.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.b.jpfennell.com:443 was resolved.
* IPv6: (none)
* IPv4: 143.198.173.239
*   Trying 143.198.173.239: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):
{ [2072 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.b.jpfennell.com
*  start date: Dec 26 11:05:37 2025 GMT
*  expire date: Mar 26 11:05:36 2026 GMT
*  subjectAltName: host "rollouts2.b.jpfennell.com" matched cert's "rollouts2.b.jpfennell.com"
*  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 rollouts2.b.jpfennell.com (143.198.173.239) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://rollouts2.b.jpfennell.com/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: rollouts2.b.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.b.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:41 GMT
< server: tiny-http (Rust)
< via: 1.1 Caddy
< 
{ [5 bytes data]

100 35318    0 35318    0     0   629k      0 --:--:-- --:--:-- --:--:--  638k
* Connection #0 to host rollouts2.b.jpfennell.com left intact

Success
              
Make email sending best effort

Build #32. Deployed 2 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-b-rollouts2-1  Recreate
 Container rollouts-b-rollouts2-1  Recreated
 Container rollouts-b-rollouts2-1  Starting
 Container rollouts-b-rollouts2-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping rollouts2.b.jpfennell.com
$ curl --fail-with-body -v https://rollouts2.b.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.b.jpfennell.com:443 was resolved.
* IPv6: (none)
* IPv4: 143.198.173.239
*   Trying 143.198.173.239: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):
{ [2072 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.b.jpfennell.com
*  start date: Dec 26 11:05:37 2025 GMT
*  expire date: Mar 26 11:05:36 2026 GMT
*  subjectAltName: host "rollouts2.b.jpfennell.com" matched cert's "rollouts2.b.jpfennell.com"
*  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 rollouts2.b.jpfennell.com (143.198.173.239) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://rollouts2.b.jpfennell.com/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: rollouts2.b.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.b.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:54:35 GMT
< server: tiny-http (Rust)
< via: 1.1 Caddy
< content-length: 25607
< 
{ [5 bytes data]

100 25607  100 25607    0     0   471k      0 --:--:-- --:--:-- --:--:--  480k
* Connection #0 to host rollouts2.b.jpfennell.com left intact

Success
              
Fix stall/deadlock

Build #31. Deployed 2 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-b-rollouts2-1  Recreate
 Container rollouts-b-rollouts2-1  Recreated
 Container rollouts-b-rollouts2-1  Starting
 Container rollouts-b-rollouts2-1  Started

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping rollouts2.b.jpfennell.com
$ curl --fail-with-body -v https://rollouts2.b.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.b.jpfennell.com:443 was resolved.
* IPv6: (none)
* IPv4: 143.198.173.239
*   Trying 143.198.173.239: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):
{ [2072 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.b.jpfennell.com
*  start date: Dec 26 11:05:37 2025 GMT
*  expire date: Mar 26 11:05:36 2026 GMT
*  subjectAltName: host "rollouts2.b.jpfennell.com" matched cert's "rollouts2.b.jpfennell.com"
*  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 rollouts2.b.jpfennell.com (143.198.173.239) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://rollouts2.b.jpfennell.com/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: rollouts2.b.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.b.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:58 GMT
< server: tiny-http (Rust)
< via: 1.1 Caddy
< content-length: 16306
< 
{ [5 bytes data]

100 16306  100 16306    0     0   336k      0 --:--:-- --:--:-- --:--:--  338k
* Connection #0 to host rollouts2.b.jpfennell.com left intact

Success
              
fix the default poll interval

Build #30. Deployed 42 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-b-rollouts2-1  Running

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping rollouts2.b.jpfennell.com
$ curl --fail-with-body -v https://rollouts2.b.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 165.22.34.199:443...
* Connected to rollouts2.b.jpfennell.com (165.22.34.199) 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.b.jpfennell.com
*  start date: Apr 16 17:21:04 2025 GMT
*  expire date: Jul 15 17:21:03 2025 GMT
*  subjectAltName: host "rollouts2.b.jpfennell.com" matched cert's "rollouts2.b.jpfennell.com"
*  issuer: C=US; O=Let's Encrypt; CN=E5
*  SSL certificate verify ok.
} [5 bytes data]
* using HTTP/2
* h2h3 [:method: GET]
* h2h3 [:path: /]
* h2h3 [:scheme: https]
* h2h3 [:authority: rollouts2.b.jpfennell.com]
* h2h3 [user-agent: curl/7.88.1]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x5e2eef0f0780)
} [5 bytes data]
> GET / HTTP/2
> Host: rollouts2.b.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: Thu, 01 May 2025 13:13:39 GMT
< server: tiny-http (Rust)
< vary: Accept-Encoding
< via: 2.0 Caddy
< via: 1.1 Caddy
< 
{ [5 bytes data]

100  7669    0  7669    0     0  68418      0 --:--:-- --:--:-- --:--:-- 69090
* Connection #0 to host rollouts2.b.jpfennell.com left intact

Success
              
Project configuration
{
  "auth_token": "",
  "branch": "main",
  "name": "rollouts2.b.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.b.jpfennell.com",
      "run": "curl --fail-with-body -v https://rollouts2.b.jpfennell.com --output /dev/null"
    }
  ],
  "wait_minutes": 10,
  "working_directory": "/home/james/rollouts-b"
}

subwaydata.nyc (website)

github.com/jamespfennell/subwaydata.nyc

Last deployed 42 weeks ago.

No pending deployment.

Most recent deployments
Fix website command flags

Build #81. Deployed 42 weeks ago.

Deployment logs
Pull
$ docker compose pull
 subwaydatanyc-etl Skipped - Image is already being pulled by subwaydatanyc-website 
 subwaydatanyc-website Pulling 
 subwaydatanyc-website Pulled 

Success
              
Redeploy
$ docker compose up -d
 Container subwaydatanyc-subwaydatanyc-website-1  Running
 Container subwaydatanyc-subwaydatanyc-etl-1  Running

Success
              
Wait for 5 seconds
$ sleep 5

Success
              
Ping subwaydata.nyc
$ curl --fail-with-body -v https://subwaydata.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*   Trying 165.22.34.199:443...
* Connected to subwaydata.nyc (165.22.34.199) 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):
{ [2077 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=subwaydata.nyc
*  start date: Apr  7 14:48:31 2025 GMT
*  expire date: Jul  6 14:48:30 2025 GMT
*  subjectAltName: host "subwaydata.nyc" matched cert's "subwaydata.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: /]
* h2h3 [:scheme: https]
* h2h3 [:authority: subwaydata.nyc]
* h2h3 [user-agent: curl/7.88.1]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x5e78ceae6780)
} [5 bytes data]
> GET / HTTP/2
> Host: subwaydata.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: text/html
< date: Thu, 01 May 2025 13:02:45 GMT
< vary: Accept-Encoding
< via: 2.0 Caddy
< via: 1.1 Caddy
< 
{ [5 bytes data]

100  2682    0  2682    0     0  39444      0 --:--:-- --:--:-- --:--:-- 40029
* Connection #0 to host subwaydata.nyc left intact

Success
              
Project configuration
{
  "auth_token": "",
  "branch": "main",
  "name": "subwaydata.nyc (website)",
  "paused": false,
  "repo": "github.com/jamespfennell/subwaydata.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 subwaydata.nyc",
      "run": "curl --fail-with-body -v https://subwaydata.nyc --output /dev/null"
    }
  ],
  "wait_minutes": 0,
  "working_directory": "/home/james/subwaydata.nyc"
}

GitHub client

Rate limiting data

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