Skip to content

Commit

Permalink
Publish for all platforms
Browse files Browse the repository at this point in the history
Pull Request: #9 (main)
  • Loading branch information
dimikot committed Mar 2, 2024
1 parent 2546714 commit 50263fb
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 13 deletions.
22 changes: 20 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ jobs:
- name: Kill self-hosted runner container
run: kill -SIGINT $(cat ~user/entrypoint.pid)

# Publishes host image to Docker Hub.
# Publishes "host" image to Docker Hub.
push-host:
runs-on: ubuntu-latest
needs:
Expand All @@ -87,6 +87,8 @@ jobs:
- spawn-job-test
steps:
- uses: actions/checkout@v4
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
- uses: docker/metadata-action@v5
id: meta
with:
Expand All @@ -99,11 +101,18 @@ jobs:
- uses: docker/build-push-action@v5
with:
context: docker/host
platforms: linux/amd64,linux/arm64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
- uses: peter-evans/dockerhub-description@v3
with:
username: dimikot
password: ${{ secrets.DOCKERHUB_PAT }}
readme-filepath: docker/host/README.md
repository: dimikot/ci-storage-host

# Publishes self-hosted-runner image to Docker Hub.
# Publishes "self-hosted-runner" image to Docker Hub.
push-self-hosted-runner:
runs-on: ubuntu-latest
needs:
Expand All @@ -112,6 +121,8 @@ jobs:
- spawn-job-test
steps:
- uses: actions/checkout@v4
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
- uses: docker/metadata-action@v5
id: meta
with:
Expand All @@ -124,6 +135,13 @@ jobs:
- uses: docker/build-push-action@v5
with:
context: docker/self-hosted-runner
platforms: linux/amd64,linux/arm64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
- uses: peter-evans/dockerhub-description@v3
with:
username: dimikot
password: ${{ secrets.DOCKERHUB_PAT }}
readme-filepath: docker/self-hosted-runner/README.md
repository: dimikot/ci-storage-self-hosted-runner
2 changes: 2 additions & 0 deletions docker/host/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ Build an image from this Dockerfile to launch a simple SSH server with rsync.

One "host" container may serve multiple GitHub repositories. Each of them will
have own directory in /home/user/ci-storage (managed by ci-storage tool).

See also https://github.com/dimikot/ci-storage
2 changes: 1 addition & 1 deletion docker/host/entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#
set -u -e

if [[ "${CI_STORAGE_HOST_PUBLIC_KEY:=''}" == "" ]]; then
if [[ "${CI_STORAGE_HOST_PUBLIC_KEY:=}" == "" ]]; then
echo "CI_STORAGE_HOST_PUBLIC_KEY must be set to a valid SSH public key."
exit 1
fi
Expand Down
2 changes: 2 additions & 0 deletions docker/self-hosted-runner/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,5 @@ self-hosted runners as you want. An example scenario:
The container in this Dockerfile is serves only one particular GitHub repository
(controlled by GH_REPOSITORY environment variable at boot time). To serve
different repositories, boot different containers.

See also https://github.com/dimikot/ci-storage
22 changes: 12 additions & 10 deletions docker/self-hosted-runner/entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,23 @@
#
set -u -e

if [[ "${GH_REPOSITORY:=''}" != */* ]]; then
if [[ "${GH_REPOSITORY:=}" != */* ]]; then
echo "GH_REPOSITORY must be set, and the format should be {owner}/{repo}.";
exit 1;
fi
if [[ "${GH_LABELS:=''}" == "" ]]; then
if [[ "${GH_LABELS:=}" == "" ]]; then
echo "GH_LABELS must be set.";
exit 1;
fi
if [[ "${GH_TOKEN:=''}" == "" ]]; then
if [[ "${GH_TOKEN:=}" == "" ]]; then
echo "GH_TOKEN must be set.";
exit 1;
fi
if [[ "${CI_STORAGE_HOST:=''}" != "" && ! "$CI_STORAGE_HOST" =~ ^([-.[:alnum:]]+@)?[-.[:alnum:]]+$ ]]; then
if [[ "${CI_STORAGE_HOST:=}" != "" && ! "$CI_STORAGE_HOST" =~ ^([-.[:alnum:]]+@)?[-.[:alnum:]]+$ ]]; then
echo "If CI_STORAGE_HOST is passed, it must be in form of {hostname} or {user}@{hostname}.";
exit 1;
fi
if [[ "${CI_STORAGE_HOST_PRIVATE_KEY:=''}" != "" && "$CI_STORAGE_HOST_PRIVATE_KEY" != *OPENSSH\ PRIVATE\ KEY* ]]; then
if [[ "${CI_STORAGE_HOST_PRIVATE_KEY:=}" != "" && "$CI_STORAGE_HOST_PRIVATE_KEY" != *OPENSSH\ PRIVATE\ KEY* ]]; then
echo "If CI_STORAGE_HOST_PRIVATE_KEY is passed, it must be an SSH private key.";
exit 1;
fi
Expand All @@ -60,11 +60,13 @@ if [[ "$CI_STORAGE_HOST" != "" ]]; then
ssh-keyscan -H "$CI_STORAGE_HOST" >> ~/.ssh/known_hosts
chmod 600 ~/.ssh/known_hosts
mkdir -p "$local_dir"
ci-storage load \
--storage-host="$CI_STORAGE_HOST" \
--storage-dir="~/ci-storage/$GH_REPOSITORY" \
--slot-id="?" \
--local-dir="$local_dir"
if [[ "$CI_STORAGE_HOST_PRIVATE_KEY" != "" ]]; then
ci-storage load \
--storage-host="$CI_STORAGE_HOST" \
--storage-dir="~/ci-storage/$GH_REPOSITORY" \
--slot-id="?" \
--local-dir="$local_dir"
fi
fi

token=$(gh api -X POST --jq .token "repos/$GH_REPOSITORY/actions/runners/registration-token")
Expand Down

0 comments on commit 50263fb

Please sign in to comment.