Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
126 commits
Select commit Hold shift + click to select a range
47a9bf1
gh-action: weekly workers & fly prod deploys
ignoramous Sep 23, 2023
8e4be2a
fly: reduce concurrent conns
ignoramous Nov 18, 2023
0579ed3
node: tune tcp backlog, max conns, load adj
ignoramous Nov 18, 2023
4bad1fa
node: re-tune maxconns and fly limits
ignoramous Nov 20, 2023
b6aceee
gh-action: disable auto deploy for cf workers
ignoramous Nov 21, 2023
7c1ef62
gh-action: node v21 and deno v1.40 for profiler
ignoramous Feb 20, 2024
f247f75
run: ignore kill trap fails
ignoramous Feb 20, 2024
b003bd9
gh-action: https://github.com/ossf/scorecard-action/issues/997
ignoramous Jun 12, 2024
4d7b609
dockerfile: node 22
ignoramous May 4, 2024
178d1f2
gh-action: wrangler 3.56
ignoramous Jun 19, 2024
3578d5d
wrangler: upload source maps
ignoramous Jun 19, 2024
5f38bdc
fly: mmap to read trie on disk
ignoramous Jun 24, 2024
6405fe4
node: rmv webpack for backend
ignoramous Jun 24, 2024
df8003e
use mmap for node 22
ignoramous Jun 24, 2024
825df13
node: type assertions with type accessors
ignoramous Jun 24, 2024
08ddc4a
node: use @aryaskov/mmap-io
ignoramous Jun 24, 2024
84fd119
deno: v1.44.4
ignoramous Jun 24, 2024
151827b
node: fix container cwd
ignoramous Jun 24, 2024
0be6b39
gh-action: denoland/deployctl version
ignoramous Jun 24, 2024
3d9a50c
deno: import_map mmap-io
ignoramous Jun 25, 2024
204d94d
fly: webpack bundle target node 22
ignoramous Jun 25, 2024
b861b28
fly: webpack externalize native module mmap
ignoramous Jun 25, 2024
c526a05
node: rmv unused var from blocklists.js
ignoramous Jun 25, 2024
5e32ac7
node: omit dev deps in docker
ignoramous Jun 25, 2024
9bc73b3
fly: bundle node_modules instead of copying
ignoramous Jun 25, 2024
f9ef390
fly: do not omit-dev in setup (dep: webpack)
ignoramous Jun 25, 2024
8b46238
fly: fix entrypoint
ignoramous Jun 25, 2024
76eb69f
gh-action: ghcr for node-alpine mk1
ignoramous Jun 27, 2024
d4772c7
util: always clear timeouts on errors
ignoramous Sep 24, 2024
bf96425
log: rmv log timers post arb delay (2m) to avoid leak
ignoramous Sep 24, 2024
b4c13cb
node: add on demand heap measurements
ignoramous Sep 24, 2024
051b8d2
env: measure heap in prod for select Fly regions
ignoramous Sep 24, 2024
9e0b52b
node: incr total heapsnapshots from 10 to 20
ignoramous Sep 24, 2024
356beac
node: measure heap on low ram
ignoramous Sep 24, 2024
472bc8c
node: log elapsed time to write a heapsnapshot
ignoramous Sep 24, 2024
99898d5
dnsop/resolver: m warn log
ignoramous Sep 24, 2024
d336c46
node: lower heap snapshot thresholds for local env
ignoramous Sep 24, 2024
f445256
fly: disable swap, enable auto suspend
ignoramous Sep 25, 2024
68597f2
plugin: rmv log timers for execute()
ignoramous Sep 25, 2024
716f21b
fly: rmv non-functional swapon
ignoramous Sep 25, 2024
e5246c0
fly: restart policy; on-fail
ignoramous Sep 25, 2024
bf34438
plugins: do not err out user-op on malformed blockstamp
ignoramous Sep 25, 2024
84a7ee1
all: m jsdoc
ignoramous Sep 25, 2024
151af4c
dns-op: always delegate ipv4only.arpa to doh upstreams
ignoramous Sep 25, 2024
b032f57
node: m logs fmt
ignoramous Sep 25, 2024
9cec6c2
fly: m fix invalid restart policy
ignoramous Sep 25, 2024
b973550
user-op: m assign missing var
ignoramous Sep 25, 2024
a178742
all: rmv log timers
ignoramous Sep 25, 2024
4f25b74
node: m server event logs
ignoramous Sep 26, 2024
36b178a
core/dns: m handle transacts for null sockets
ignoramous Sep 26, 2024
433e493
core/dns: m jsdocs
ignoramous Sep 26, 2024
cc6e798
doh: add cors for user-agent=dohjs
ignoramous Sep 27, 2024
45c0799
core/io: doh cache headers
ignoramous Sep 27, 2024
ad46d2e
core/io: add block flag headers iff non-empty
ignoramous Sep 27, 2024
138cbc5
core/io: add debug headers iff not prod
ignoramous Sep 27, 2024
7ecb04b
core/dns: missing socket callback args
ignoramous Sep 27, 2024
1d7101e
core/io: m debug log dns response
ignoramous Sep 27, 2024
73f8d20
node: sock addrs may be undefined
ignoramous Sep 27, 2024
953e0d1
Fly: disable swap when using auto suspend
ignoramous Sep 28, 2024
a033776
dnsutil: distinct err values for getInterestingAnswerData
ignoramous Sep 28, 2024
71bf7a0
various: m logs
ignoramous Sep 28, 2024
2905c68
core/dns: m uninit var
ignoramous Sep 28, 2024
9530590
core/node: dns53 default on node
ignoramous Sep 28, 2024
7810836
system: sticky parcel & jsdocs
ignoramous Sep 29, 2024
10dbc94
commons/envutil: m jsdoc
ignoramous Sep 29, 2024
8b1bc5c
core/io: m decode synth servfails
ignoramous Sep 29, 2024
180d5c9
core/node: rmv no-op code
ignoramous Sep 29, 2024
bd725ab
resolver: coalesce requests
ignoramous Sep 29, 2024
3fcf47d
system: ephemeral event common for both listeners & awaiters
ignoramous Sep 30, 2024
f2ff910
node: missing rottm var
ignoramous Oct 12, 2024
70ebcdd
node: m logs tracking servers
ignoramous Oct 12, 2024
cfa036a
package: httpx-server 2.0
ignoramous Oct 12, 2024
439fc9c
core/env: bun_env var
ignoramous Oct 16, 2024
c8f019b
bun: use mmap for blocklists
ignoramous Oct 16, 2024
01e12f4
node: 1.3kb max tls record size
ignoramous Oct 16, 2024
f6ebd2b
bun: tls ticket keys not supported
ignoramous Oct 16, 2024
d29940c
node: 4kb max tls record size
ignoramous Oct 16, 2024
8498359
run: bun
ignoramous Oct 16, 2024
aeb052b
bun: for now supports http1 only
ignoramous Oct 16, 2024
cbc60cd
gh-actions: bun ghcr
ignoramous Oct 16, 2024
1527482
gh-actions: bun profiler
ignoramous Oct 16, 2024
0d994f3
run: deno --allow-import
ignoramous Oct 16, 2024
8264fcd
deno: v2 auto detects node modules
ignoramous Oct 16, 2024
c5b49eb
node/config: dynamically import the mmap default export
ignoramous Oct 16, 2024
d71e2dc
node/config: m print stacktrace on uncaught warnings
ignoramous Oct 16, 2024
f3b5de6
node: never re-track an existing server
ignoramous Oct 16, 2024
973002e
node: m jsdoc
ignoramous Oct 16, 2024
cdcb201
gh-action: deno deploy for deno v2
ignoramous Oct 16, 2024
e4d82eb
gh-actions: use actions/checkout@v4
ignoramous Oct 16, 2024
10ef12f
node: prefer aes128 ciphers
ignoramous Oct 16, 2024
8f8a887
util: setImmediate is an optional node global
ignoramous Oct 16, 2024
03b51cd
all: Deno v2
ignoramous Oct 17, 2024
c4748e3
log: m lint
ignoramous Oct 17, 2024
c7abdc2
node: tls session ids
ignoramous Oct 17, 2024
aec4669
node: dynamically size tls record fragment
ignoramous Oct 17, 2024
9bb30df
node: rmv irrelevant comment
ignoramous Oct 17, 2024
74bdcf6
deno: v2 supports node:http2
ignoramous Oct 17, 2024
d09e899
node: await on tcp-tls write promise
ignoramous Oct 17, 2024
7b55ed8
readme: fossunited
ignoramous Nov 12, 2024
4f89da4
build/pre: m debug log
ignoramous Apr 26, 2025
b0b1a15
readme: fossunited b&w png logo
ignoramous Apr 26, 2025
c5537dd
gh-action: harden pr.yml
ignoramous Apr 26, 2025
2d3f7b5
bufutil: m jsdoc
ignoramous May 2, 2025
9fb8b71
rdnsutil: mv blocklist timestamp fn to util
ignoramous May 2, 2025
35ec217
server-workers: m unused var
ignoramous May 2, 2025
5220a63
system: m unused var
ignoramous May 2, 2025
a69cd2c
env: auto renew old blocklist files
ignoramous May 2, 2025
e39d2de
all: auto renew blocklists
ignoramous May 2, 2025
73b01bc
node/config: m log exception
ignoramous May 2, 2025
56e0def
rdns: m jsdocs and logs
ignoramous May 2, 2025
0476a42
node: adjust TLS frag size iff TLSSocket
ignoramous May 2, 2025
9c3f0db
wrangler: set auto renew to 42 weeks
ignoramous May 2, 2025
cc9b438
gh-actions: update ossf/scorecard versions
ignoramous May 2, 2025
a6405a1
gh-action: m fix account id input for cf
ignoramous May 3, 2025
6d37a7a
deno: s/deno_env/deno_env_domain/g
ignoramous May 3, 2025
5cd15f9
dns/resolver: m jsdoc
ignoramous May 3, 2025
9c1d6dc
gh-actions: deno deployctl ver upgrade
ignoramous May 3, 2025
f82ceff
deno: skip deno-specific dep lockfile
ignoramous May 3, 2025
586546d
core/doh: m lint, jsdocs
ignoramous May 17, 2025
0ae09de
fly: attempt blocklist auto-renew if older than 2w
ignoramous May 17, 2025
4cedb70
all: global auto blocklist renewals at 42 weeks
ignoramous May 17, 2025
ee765cc
lint: commons
ignoramous Jun 6, 2025
a5d4b0c
dnsutil: m add buf len to decode errs
ignoramous Jun 6, 2025
50e4ef1
util: m jsdoc
ignoramous Jun 6, 2025
070ac8d
cc: use refactored blocklist filter timestamp api
ignoramous Jun 6, 2025
d8868b2
dns-op: m jsdoc
ignoramous Jun 6, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 23 additions & 5 deletions .github/workflows/cf.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
name: ⛅ CF
on:
# github.com/serverless-dns/blocklists/blob/6021f80f/.github/workflows/createUploadBlocklistFilter.yml#L4-L6
# schedule:
# at 7:53 on 3rd, 10th, 18th, 26th of every month
# - cron: '53 7 3,10,18,26 * *'
# docs.github.com/en/actions/managing-workflow-runs/manually-running-a-workflow
# docs.github.com/en/actions/learn-github-actions/events-that-trigger-workflows#workflow_dispatch
# docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#onworkflow_dispatchinputs
Expand Down Expand Up @@ -48,6 +52,7 @@ on:

env:
GIT_REF: ${{ github.event.inputs.commit || github.ref }}
WRANGLER_VER: '3.56.0'
# default is 'dev' which is really empty/no env
WORKERS_ENV: ''

Expand All @@ -57,8 +62,8 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Checkout
uses: actions/checkout@v3.3.0
- name: 🛒 Checkout
uses: actions/checkout@v4
with:
ref: ${{ env.GIT_REF }}
fetch-depth: 0
Expand Down Expand Up @@ -86,20 +91,33 @@ jobs:
WENV: 'prod'
COMMIT_SHA: ${{ github.sha }}

- name: 🌽 Cron?
if: github.event.schedule == '53 7 3,10,18,26 * *'
run: |
echo "WORKERS_ENV=${WENV}" >> $GITHUB_ENV
echo "COMMIT_SHA=${COMMIT_SHA}" >> $GITHUB_ENV
shell: bash
env:
# cron deploys always deploy to prod
WENV: 'prod'
COMMIT_SHA: ${{ github.sha }}

# npm (and node16) are installed by wrangler-action in a pre-job setup
- name: 🏗 Get dependencies
run: npm i

- name: 📚 Wrangler publish
# github.com/cloudflare/wrangler-action
uses: cloudflare/wrangler-action@2.0.0
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
# input overrides env-defaults, regardless
environment: ${{ env.WORKERS_ENV }}
wranglerVersion: ${{ env.WRANGLER_VER }}
accountId: ${{ secrets.CF_ACCOUNT_ID }}
env:
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
GIT_COMMIT_ID: ${{ env.GIT_REF }}
# setting CLOUDFLARE_ACCOUNT_ID no longer works
GIT_COMMIT_ID: ${{ env.COMMIT_SHA }}

- name: 🎤 Notice
run: |
Expand Down
14 changes: 8 additions & 6 deletions .github/workflows/deno-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ jobs:
contents: read
steps:
- name: 🚚 Fetch code
uses: actions/checkout@v3.3.0
uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.git-ref || github.ref }}
fetch-depth: 0
Expand All @@ -85,34 +85,36 @@ jobs:
git reset
git merge origin/${BUILD_BRANCH} || :

- name: 🦕 Install Deno @1.29
- name: 🦕 Install Deno@2.x
uses: denoland/setup-deno@main
with:
deno-version: 1.29.3
deno-version: 2.x

- name: 📦 Bundle up
if: ${{ env.DEPLOY_MODE == 'action' }}
run: |
echo "::notice::do not forget to set DENO_PROJECT_NAME via github secrets!"
deno task prepare
deno bundle ${IN_FILE} ${OUT_FILE}
# todo: deno bundle ${IN_FILE} ${OUT_FILE}
shell: bash

# github.com/denoland/deployctl/blob/febd898/action.yml
# step output: www.actionsbyexample.com/outputs.html
- name: 🤸🏼 Deploy to deno.com
id: dd
if: ${{ env.DEPLOY_MODE == 'action' }}
uses: denoland/deployctl@1.4.0
uses: denoland/deployctl@v1
with:
project: ${{ env.PROJECT_NAME }}
entrypoint: ${{ env.OUT_FILE }}
# todo: if bundling, replace IN_FILE w/ OUT_FILE
entrypoint: ${{ env.IN_FILE }}

- name: 🚢 Merge latest code into deploy-branch
if: ${{ env.DEPLOY_MODE == 'auto' }}
run: |
git config --local user.name 'github-actions[bot]'
git config --local user.email 'github-actions[bot]@users.noreply.github.com'
# todo: deno bundle has been deprecated
git add ${OUT_FILE}
git commit -m "Update bundle for ${GITHUB_SHA}" && \
echo "::notice::Pushing to ${BUILD_BRANCH}" || \
Expand Down
15 changes: 14 additions & 1 deletion .github/workflows/fly.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
name: 🪂 Fly

on:
# github.com/serverless-dns/blocklists/blob/6021f80f/.github/workflows/createUploadBlocklistFilter.yml#L4-L6
schedule:
# at 7:53 on 2nd, 9th, 17th, 25th of every month
- cron: '53 7 2,9,17,25 * *'
push:
branches:
- "main"
Expand Down Expand Up @@ -77,7 +81,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: 🚚 Checkout
uses: actions/checkout@v3.3.0
uses: actions/checkout@v4
with:
ref: ${{ env.GIT_REF }}
fetch-depth: 0
Expand Down Expand Up @@ -121,6 +125,15 @@ jobs:
env:
COMMIT_SHA: ${{ github.sha }}

- name: 🚨🌽 Prod via cron?
if: github.event.schedule == '53 7 2,9,17,25 * *'
run: |
echo "FLY_APP=${FLY_PROD_APP}" >> $GITHUB_ENV
echo "::notice::Deploying PROD / ${GIT_REF} @ ${COMMIT_SHA}"
shell: bash
env:
COMMIT_SHA: ${{ github.sha }}

- name: 🚜👨‍🚒 Onebox via dispatch?
if: ${{ github.event_name == 'workflow_dispatch' &&
github.event.inputs.deployment-type == 'onebox' }}
Expand Down
107 changes: 107 additions & 0 deletions .github/workflows/ghcr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
name: 🔄 runc

on:
push:
tags:
- "v*"
workflow_dispatch:

env:
REGISTRY: "ghcr.io"
IMAGE_NAME: ${{ github.repository }}
IMAGE_NAME_BUN: ${{ github.repository }}-bun
GIT_REF: ${{ github.event.inputs.git-ref || github.ref }}

# docs.github.com/en/actions/publishing-packages/publishing-docker-images
jobs:
nodejs:
name: 🚀 Node on Alpine
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
attestations: write
id-token: write

steps:
- name: 🚚 Checkout
uses: actions/checkout@v4
with:
ref: ${{ env.GIT_REF }}
fetch-depth: 0

- name: 🔐 Login
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: 🏷️ Metadata
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

- name: 🛠 Build
id: push
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: .
file: ./node.Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

- name: 📕 Attest
uses: actions/attest-build-provenance@v1
with:
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
subject-digest: ${{ steps.push.outputs.digest }}
push-to-registry: true

bunjs:
name: 🚀 Bun on Alpine
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
attestations: write
id-token: write

steps:
- name: 🚚 Checkout
uses: actions/checkout@v4
with:
ref: ${{ env.GIT_REF }}
fetch-depth: 0

- name: 🔐 Login
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: 🏷️ Metadata
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_BUN }}

- name: 🛠 Build
id: push
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: .
file: ./bun.Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

- name: 📕 Attest
uses: actions/attest-build-provenance@v1
with:
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_BUN }}
subject-digest: ${{ steps.push.outputs.digest }}
push-to-registry: true
14 changes: 10 additions & 4 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: 🚚 Get latest code
uses: actions/checkout@v3.3.0
uses: actions/checkout@v4
with:
# Checkout base (target) repo
ref: ${{ env.GH_REF }}
Expand Down Expand Up @@ -89,7 +89,9 @@ jobs:
- name: 🚢 Push to origin?
if: ${{ env.BASE_REPO == env.PR_HEAD_REPO }}
run: |
git push origin HEAD:${{ env.PR_HEAD_REF }}
git push origin HEAD:$PR_REF
env:
PR_REF: ${{ env.PR_HEAD_REF }}

# `GITHUB_TOKEN` owned by `github-actions[bot]` has write access to
# origin in this `PR-target` workflow but not the write access to fork
Expand All @@ -99,5 +101,9 @@ jobs:
- name: 🚢 Push to fork?
if: ${{ env.BASE_REPO != env.PR_HEAD_REPO }}
run: |
git remote add fork ${{ env.PR_HEAD_REPO }}
git push fork HEAD:${{ env.PR_HEAD_REF }}
git remote add fork $PR_REPO
git push fork HEAD:$PR_REF
env:
# ref: docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions#using-an-intermediate-environment-variable
PR_REF: ${{ env.PR_HEAD_REF }}
PR_REPO: ${{ env.PR_HEAD_REPO }}
30 changes: 23 additions & 7 deletions .github/workflows/profiler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,14 @@ on:
default: 'main'
# docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onworkflow_dispatchinputs
js-runtime:
description: "proc: deno/node"
description: "proc: deno/node/bun"
required: false
default: 'node'
type: choice
options:
- node
- deno
- bun
mode:
description: "p1 (fetch) / p2 (http2) / p3 (udp/tcp)"
required: false
Expand All @@ -40,8 +41,9 @@ env:
GIT_REF: ${{ github.event.inputs.git-ref || github.ref }}
JS_RUNTIME: 'node'
MAXTIME_SEC: '30s'
NODE_VER: '19.x'
DENO_VER: '1.29.3'
NODE_VER: '22.x'
DENO_VER: '2.x'
BUN_VER: '1.x'
MODE: 'p1'
QDOH: 'q'

Expand All @@ -52,7 +54,7 @@ jobs:

steps:
- name: 🍌 Checkout
uses: actions/checkout@v3.3.0
uses: actions/checkout@v4
with:
ref: ${{ env.GIT_REF }}
fetch-depth: 0
Expand All @@ -66,9 +68,9 @@ jobs:
JSR: ${{ github.event.inputs.js-runtime || env.JS_RUNTIME }}

# docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs-or-python
- name: 🐎 Setup Node @v19
- name: 🐎 Setup Node @v22
if: env.JS_RUNTIME == 'node'
uses: actions/setup-node@v3.6.0
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VER }}

Expand All @@ -80,7 +82,7 @@ jobs:
npm run build --if-present

# deno.com/blog/deploy-static-files#example-a-statically-generated-site
- name: 🦕 Setup Deno @1.29.3
- name: 🦕 Setup Deno @2.x
if: env.JS_RUNTIME == 'deno'
uses: denoland/setup-deno@main
with:
Expand All @@ -89,8 +91,22 @@ jobs:
- name: 🥝 Deno deps
if: env.JS_RUNTIME == 'deno'
run: |
deno task prepare
deno cache ./src/server-deno.ts

# bun.sh/docs/cli/install#ci-cd
- name: 🐇 Setup Bun @ latest
if: env.JS_RUNTIME == 'bun'
uses: oven-sh/setup-bun@v2
with:
bun-version: latest

# github.com/oven-sh/setup-bun
- name: 🥕 Bun deps
if: env.JS_RUNTIME == 'bun'
run: |
bun i

# if non-interactive, prefer apt-get: unix.stackexchange.com/a/590703
# github.com/natesales/repo
# docs.github.com/en/actions/using-github-hosted-runners/customizing-github-hosted-runners#installing-software-on-ubuntu-runners
Expand Down
Loading
Loading