mirror of
https://github.com/sethforprivacy/p2pool-docker.git
synced 2026-06-23 12:22:36 -04:00
Compare commits
64 Commits
1fdd47de76
...
ci-harden-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
699b578ee7 | ||
|
|
46d68375cd | ||
|
|
1bb3947f60 | ||
|
|
df326bcf85 | ||
|
|
f0f9059dd6 | ||
|
|
93b13c156d | ||
|
|
5b7ab876bf | ||
|
|
7e7cab924e | ||
|
|
c0187089f4 | ||
|
|
6f18143ef1 | ||
|
|
81b47a06b7 | ||
|
|
a36f7e0a2f | ||
|
|
0518013758 | ||
|
|
24185da98c | ||
|
|
a0610a6215 | ||
|
|
f8867c29bb | ||
|
|
6b67d40ec2 | ||
|
|
3d1374df75 | ||
|
|
599c70f413 | ||
|
|
9303676316 | ||
|
|
c20c54e17d | ||
|
|
b3dca32ba0 | ||
|
|
f96e9166dc | ||
|
|
1ec1d51cfb | ||
|
|
d2bed819bd | ||
|
|
ea2462edf8 | ||
|
|
d30e72c868 | ||
|
|
943566c666 | ||
|
|
2afef48805 | ||
|
|
9c9a34f0d3 | ||
|
|
bd412b57f5 | ||
|
|
46a1067577 | ||
|
|
fd9cf843cf | ||
|
|
e883973c01 | ||
|
|
fa13d52fdb | ||
|
|
de5a18086b | ||
|
|
99e34b3579 | ||
|
|
21da5b959b | ||
|
|
f2476cbaaa | ||
|
|
bf406b66a8 | ||
|
|
cc76d47cc4 | ||
|
|
276ec16292 | ||
|
|
366802894c | ||
|
|
9fdc25b6b6 | ||
|
|
868cfb9673 | ||
|
|
6ebfedde92 | ||
|
|
6d4f11403b | ||
|
|
b82007d36e | ||
|
|
8522817c89 | ||
|
|
8a2d4bd270 | ||
|
|
37d68bc1bd | ||
|
|
dae74873c4 | ||
|
|
d37c6f7bdf | ||
|
|
84ebde54dd | ||
|
|
e834b7e289 | ||
|
|
389cc18843 | ||
|
|
93c985963a | ||
|
|
8d209c335a | ||
|
|
2baed31844 | ||
|
|
c591b338f3 | ||
|
|
a1a95d5294 | ||
|
|
0bc7dba09d | ||
|
|
49019ab2f9 | ||
|
|
53c1baaaf2 |
11
.github/dependabot.yml
vendored
11
.github/dependabot.yml
vendored
@@ -1,11 +0,0 @@
|
||||
version: 2
|
||||
updates:
|
||||
# Maintain dependencies for GitHub Actions
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
groups:
|
||||
dependency-updates:
|
||||
patterns:
|
||||
- "*"
|
||||
24
.github/renovate.json
vendored
Normal file
24
.github/renovate.json
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"config:recommended",
|
||||
"docker:enableMajor",
|
||||
"mergeConfidence:all-badges",
|
||||
":disableRateLimiting",
|
||||
":semanticCommits"
|
||||
],
|
||||
"rebaseWhen": "conflicted",
|
||||
"customManagers": [
|
||||
{
|
||||
"customType": "regex",
|
||||
"managerFilePatterns": [
|
||||
"/(^|/)Dockerfile$/"
|
||||
],
|
||||
"matchStrings": [
|
||||
"# renovate: datasource=(?<datasource>.*?) depName=(?<depName>.*?)( versioning=(?<versioning>.*?))?\\sARG .*?_VERSION=(?<currentValue>.*)(\\sARG .*?_CHECKSUM=(?<currentDigest>.*))?\\s",
|
||||
"# renovate: datasource=(?<datasource>.*?) depName=(?<depName>.*?)( versioning=(?<versioning>.*?))?\\sARG .*?_BRANCH=(?<currentValue>.*)(\\sARG .*?_COMMIT_HASH=(?<currentDigest>.*))?\\s"
|
||||
],
|
||||
"versioningTemplate": "{{#if versioning}}{{versioning}}{{/if}}"
|
||||
}
|
||||
]
|
||||
}
|
||||
58
.github/workflows/build-image-on-push.yml
vendored
58
.github/workflows/build-image-on-push.yml
vendored
@@ -11,12 +11,25 @@ on:
|
||||
- 'Dockerfile'
|
||||
workflow_dispatch:
|
||||
|
||||
# Least-privilege default token (this workflow only reads the repo and pulls cache)
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
# Cancel superseded runs for the same ref to save CI minutes
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
GHCR_REPO: ghcr.io/${{ github.repository_owner }}/p2pool
|
||||
|
||||
jobs:
|
||||
rebuild-container:
|
||||
name: "Build image with cache"
|
||||
timeout-minutes: 60
|
||||
permissions:
|
||||
contents: read
|
||||
packages: read
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -35,26 +48,39 @@ jobs:
|
||||
run: |
|
||||
echo "PLATFORM=linux/amd64" >> $GITHUB_ENV
|
||||
echo "DIGEST_NAME=amd64" >> $GITHUB_ENV
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3.11.1
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
-
|
||||
name: Test build of image
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v4.1.0
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Test build of image
|
||||
id: build
|
||||
uses: docker/build-push-action@v6.18.0
|
||||
uses: docker/build-push-action@v7.2.0
|
||||
with:
|
||||
push: false
|
||||
load: true
|
||||
platforms: ${{ env.PLATFORM }}
|
||||
tags: p2pool:testing
|
||||
cache-from: type=registry,ref=${{ env.GHCR_REPO }}:latest
|
||||
-
|
||||
name: Test-run image
|
||||
cache-from: |
|
||||
type=registry,ref=${{ env.GHCR_REPO }}:buildcache-${{ env.DIGEST_NAME }}
|
||||
type=registry,ref=${{ env.GHCR_REPO }}:latest
|
||||
- name: Verify reported version matches the pinned p2pool tag
|
||||
run: |
|
||||
docker run --rm p2pool:testing --wallet 468ydghFfthE3UTc53eF5MP9UyrMcUiAHP5kizVYJsej5XGaXBoAAEzUHCcUF7t3E3RrYAX8Rs1ujhBdcvMpZSbH8qkb55R &
|
||||
PID=$!
|
||||
sleep 30
|
||||
kill -SIGINT $PID # this will return a non-zero exit code if the container dies early on
|
||||
set -euo pipefail
|
||||
EXPECTED="$(awk -F= '/^ARG P2POOL_BRANCH=/{print $2; exit}' Dockerfile)"
|
||||
echo "Expecting p2pool to report: ${EXPECTED}"
|
||||
OUT="$(docker run --rm p2pool:testing --help 2>&1 || true)"
|
||||
echo "${OUT}" | head -1
|
||||
echo "${OUT}" | grep -q "${EXPECTED}" \
|
||||
|| { echo "::error::p2pool banner does not contain expected tag ${EXPECTED}"; exit 1; }
|
||||
- name: Verify the container starts and stays up
|
||||
run: |
|
||||
set -uo pipefail
|
||||
CID="$(docker run -d p2pool:testing --wallet 468ydghFfthE3UTc53eF5MP9UyrMcUiAHP5kizVYJsej5XGaXBoAAEzUHCcUF7t3E3RrYAX8Rs1ujhBdcvMpZSbH8qkb55R)"
|
||||
sleep 20
|
||||
if [ "$(docker inspect -f '{{.State.Running}}' "$CID" 2>/dev/null || echo false)" != "true" ]; then
|
||||
echo "::error::container exited early"; docker logs "$CID" 2>&1 || true
|
||||
docker rm -f "$CID" >/dev/null 2>&1 || true; exit 1
|
||||
fi
|
||||
docker rm -f "$CID" >/dev/null 2>&1 || true
|
||||
|
||||
88
.github/workflows/update-image-on-push.yml
vendored
88
.github/workflows/update-image-on-push.yml
vendored
@@ -8,12 +8,26 @@ on:
|
||||
- 'Dockerfile'
|
||||
workflow_dispatch:
|
||||
|
||||
# Least-privilege default; jobs that push opt into packages: write below
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
# Never run two prod pushes for the same ref concurrently (avoid racing the
|
||||
# manifest/`latest` tag); do not cancel an in-flight push.
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: false
|
||||
|
||||
env:
|
||||
GHCR_REPO: ghcr.io/${{ github.repository_owner }}/p2pool
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: "Build container for multiple architectures and push by digest"
|
||||
timeout-minutes: 60
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -34,32 +48,57 @@ jobs:
|
||||
echo "DIGEST_NAME=amd64" >> $GITHUB_ENV
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
uses: docker/metadata-action@v6
|
||||
with:
|
||||
images: |
|
||||
${{ env.GHCR_REPO }}
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3.11.1
|
||||
-
|
||||
name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v3.5.0
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v4.1.0
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v4.2.0
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
-
|
||||
name: Build and and push by digest
|
||||
uses: docker/build-push-action@v6.18.0
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Build and push by digest
|
||||
uses: docker/build-push-action@v7.2.0
|
||||
id: build
|
||||
with:
|
||||
outputs: type=image,"name=${{ env.GHCR_REPO }}",push-by-digest=true,name-canonical=true,push=true
|
||||
platforms: ${{ env.PLATFORM }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
cache-from: type=registry,ref=${{ env.GHCR_REPO }}:latest
|
||||
cache-from: |
|
||||
type=registry,ref=${{ env.GHCR_REPO }}:buildcache-${{ env.DIGEST_NAME }}
|
||||
type=registry,ref=${{ env.GHCR_REPO }}:latest
|
||||
cache-to: type=registry,ref=${{ env.GHCR_REPO }}:buildcache-${{ env.DIGEST_NAME }},mode=max
|
||||
|
||||
# Smoke-test the exact artifact that was just pushed, BEFORE the merge job
|
||||
# tags it `latest`. If this fails, the merge job (needs: build) never runs.
|
||||
- name: Verify pushed image reports the pinned p2pool tag
|
||||
run: |
|
||||
set -euo pipefail
|
||||
EXPECTED="$(awk -F= '/^ARG P2POOL_BRANCH=/{print $2; exit}' Dockerfile)"
|
||||
REF="${GHCR_REPO}@${{ steps.build.outputs.digest }}"
|
||||
echo "Expecting ${EXPECTED} from ${REF}"
|
||||
OUT="$(docker run --rm "${REF}" --help 2>&1 || true)"
|
||||
echo "${OUT}" | head -1
|
||||
echo "${OUT}" | grep -q "${EXPECTED}" \
|
||||
|| { echo "::error::pushed image banner does not contain expected tag ${EXPECTED}"; exit 1; }
|
||||
- name: Verify pushed image starts and stays up
|
||||
run: |
|
||||
set -uo pipefail
|
||||
REF="${GHCR_REPO}@${{ steps.build.outputs.digest }}"
|
||||
CID="$(docker run -d "${REF}" --wallet 468ydghFfthE3UTc53eF5MP9UyrMcUiAHP5kizVYJsej5XGaXBoAAEzUHCcUF7t3E3RrYAX8Rs1ujhBdcvMpZSbH8qkb55R)"
|
||||
sleep 20
|
||||
if [ "$(docker inspect -f '{{.State.Running}}' "$CID" 2>/dev/null || echo false)" != "true" ]; then
|
||||
echo "::error::pushed image exited early"; docker logs "$CID" 2>&1 || true
|
||||
docker rm -f "$CID" >/dev/null 2>&1 || true; exit 1
|
||||
fi
|
||||
docker rm -f "$CID" >/dev/null 2>&1 || true
|
||||
|
||||
- name: Export digest
|
||||
run: |
|
||||
@@ -68,7 +107,7 @@ jobs:
|
||||
touch "${{ runner.temp }}/digests/${digest#sha256:}"
|
||||
|
||||
- name: Upload digest
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: digests-${{ env.DIGEST_NAME }}
|
||||
path: ${{ runner.temp }}/digests/*
|
||||
@@ -76,36 +115,43 @@ jobs:
|
||||
retention-days: 1
|
||||
|
||||
merge:
|
||||
name: "Merge digests and push with proper tags"
|
||||
timeout-minutes: 15
|
||||
runs-on: ubuntu-latest
|
||||
needs:
|
||||
- build
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
steps:
|
||||
- name: Download digests
|
||||
uses: actions/download-artifact@v5
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
path: ${{ runner.temp }}/digests
|
||||
pattern: digests-*
|
||||
merge-multiple: true
|
||||
|
||||
- name: Login to GHCR
|
||||
uses: docker/login-action@v3.5.0
|
||||
uses: docker/login-action@v4.2.0
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3.11.1
|
||||
uses: docker/setup-buildx-action@v4.1.0
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Get p2pool release tag
|
||||
run: echo P2POOL_TAG="$(awk -F '=' '/P2POOL_BRANCH=/ {print $2}' Dockerfile)" >> $GITHUB_ENV
|
||||
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
uses: docker/metadata-action@v6
|
||||
with:
|
||||
images: |
|
||||
${{ env.GHCR_REPO }}
|
||||
|
||||
25
Dockerfile
25
Dockerfile
@@ -1,7 +1,8 @@
|
||||
ARG P2POOL_BRANCH=v4.9
|
||||
# renovate: datasource=github-releases depName=SChernykh/p2pool
|
||||
ARG P2POOL_BRANCH=v4.17
|
||||
|
||||
# Select latest Ubuntu LTS for the build image base
|
||||
FROM ubuntu:latest as build
|
||||
# Pin to the latest Ubuntu LTS for the build image base (kept current by Renovate)
|
||||
FROM ubuntu:26.04 AS build
|
||||
LABEL author="sethforprivacy@protonmail.com" \
|
||||
maintainer="sethforprivacy@protonmail.com"
|
||||
|
||||
@@ -16,28 +17,30 @@ RUN apt-get update \
|
||||
|
||||
ENV CFLAGS='-fPIC'
|
||||
ENV CXXFLAGS='-fPIC'
|
||||
ENV USE_SINGLE_BUILDDIR 1
|
||||
ENV BOOST_DEBUG 1
|
||||
ENV USE_SINGLE_BUILDDIR=1
|
||||
ENV BOOST_DEBUG=1
|
||||
|
||||
# Switch to p2pool source directory
|
||||
WORKDIR /p2pool
|
||||
|
||||
# Git pull p2pool source at specified tag/branch
|
||||
ARG P2POOL_BRANCH
|
||||
RUN git clone --recursive --branch ${P2POOL_BRANCH} https://github.com/SChernykh/p2pool .
|
||||
RUN git clone --recursive --depth 1 --shallow-submodules --branch ${P2POOL_BRANCH} https://github.com/SChernykh/p2pool .
|
||||
|
||||
# Make static p2pool binary
|
||||
ARG NPROC
|
||||
RUN test -z "$NPROC" && nproc > /nproc || echo -n "$NPROC" > /nproc && mkdir build && cd build && cmake .. && make -j"$(cat /nproc)"
|
||||
|
||||
# Select latest Ubuntu LTS for the image base
|
||||
FROM ubuntu:latest
|
||||
# Pin to the latest Ubuntu LTS for the image base (kept current by Renovate)
|
||||
FROM ubuntu:26.04
|
||||
|
||||
# Install remaining dependencies
|
||||
# Install only the runtime shared libraries that the p2pool binary links against
|
||||
# (runtime equivalents of the build-stage -dev packages, verified via ldd on the
|
||||
# built binary against the pinned Ubuntu 24.04 base)
|
||||
RUN apt-get update \
|
||||
&& apt-get upgrade -y \
|
||||
&& apt-get install --no-install-recommends -y libuv1-dev libzmq3-dev libsodium-dev \
|
||||
libpgm-dev libnorm-dev libgss-dev libcurl4-openssl-dev libidn2-0-dev \
|
||||
&& apt-get install --no-install-recommends -y libuv1t64 libzmq5 libsodium23 \
|
||||
libpgm-5.3-0t64 libnorm1t64 libgssapi-krb5-2 libcurl4t64 libidn2-0 \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
|
||||
2
LICENSE
2
LICENSE
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021 Seth Simmons (@sethsimmons)
|
||||
Copyright (c) 2021 Seth For Privacy (@sethforprivacy)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -3,8 +3,8 @@ A simple and straightforward Dockerized [p2pool](https://github.com/SChernykh/p2
|
||||
|
||||
## Actions
|
||||
|
||||
[](https://github.com/sethsimmons/p2pool-docker/actions/workflows/update-daily.yml)
|
||||
[](https://github.com/sethsimmons/p2pool-docker/actions/workflows/update-base-image.yml)
|
||||
[](https://github.com/sethforprivacy/p2pool-docker/actions/workflows/update-daily.yml)
|
||||
[](https://github.com/sethforprivacy/p2pool-docker/actions/workflows/update-base-image.yml)
|
||||
|
||||
# Docker Hub
|
||||
This repo is used to build the images available here on GHCR.
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
version: '3.5'
|
||||
services:
|
||||
monerod:
|
||||
image: sethsimmons/simple-monerod:latest
|
||||
image: ghcr.io/sethforprivacy/simple-monerod:latest
|
||||
restart: unless-stopped
|
||||
container_name: monerod
|
||||
volumes:
|
||||
@@ -21,7 +20,7 @@ services:
|
||||
- "--out-peers=50"
|
||||
|
||||
p2pool:
|
||||
image: sethsimmons/p2pool:latest
|
||||
image: ghcr.io/sethforprivacy/p2pool:latest
|
||||
restart: unless-stopped
|
||||
container_name: p2pool
|
||||
tty: true
|
||||
@@ -52,15 +51,6 @@ services:
|
||||
volumes:
|
||||
- tor-keys:/var/lib/tor/hidden_service/
|
||||
|
||||
autoheal:
|
||||
image: willfarrell/autoheal:latest
|
||||
container_name: autoheal
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
AUTOHEAL_CONTAINER_LABEL: all
|
||||
volumes:
|
||||
- "/var/run/docker.sock:/var/run/docker.sock"
|
||||
|
||||
watchtower:
|
||||
image: containrrr/watchtower:latest
|
||||
container_name: watchtower
|
||||
|
||||
Reference in New Issue
Block a user