initial import
This commit is contained in:
parent
c8f0805af9
commit
fd83c3ffe7
|
|
@ -0,0 +1,6 @@
|
|||
*.md
|
||||
*.txt
|
||||
.github/
|
||||
.shared/.*
|
||||
.shared/*.md
|
||||
.shared/*.txt
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
# EditorConfig is awesome: https://EditorConfig.org
|
||||
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
indent_style = space
|
||||
indent_size = 3
|
||||
|
||||
[*.{bat,cmd}]
|
||||
end_of_line = crlf
|
||||
|
||||
[*.{yml,yaml}]
|
||||
indent_size = 2
|
||||
|
|
@ -0,0 +1,132 @@
|
|||
# inspired by
|
||||
# - https://github.com/alexkaratarakis/gitattributes/blob/master/Java.gitattributes
|
||||
# - https://github.com/alexkaratarakis/gitattributes/blob/master/Common.gitattributes
|
||||
|
||||
# Handle line endings automatically for files detected as text
|
||||
# and leave all files detected as binary untouched.
|
||||
* text=auto
|
||||
|
||||
#
|
||||
# The above will handle all files with names NOT matching patterns defined below
|
||||
#
|
||||
|
||||
# Git files
|
||||
.gitattributes text eol=lf
|
||||
**/.gitattributes text eol=lf
|
||||
.gitignore text eol=lf
|
||||
**/.gitignore text eol=lf
|
||||
|
||||
|
||||
# Documents
|
||||
*.doc binary diff=astextplain
|
||||
*.docx binary diff=astextplain
|
||||
*.dot binary diff=astextplain
|
||||
*.pdf binary diff=astextplain
|
||||
*.ppt binary diff=astextplain
|
||||
*.pptx binary diff=astextplain
|
||||
*.rtf binary diff=astextplain
|
||||
*.vsd binary diff=astextplain
|
||||
*.vsdx binary diff=astextplain
|
||||
*.odt binary diff=odf
|
||||
*.ods binary diff=odf
|
||||
*.odp binary diff=odf
|
||||
*.adoc text
|
||||
*.csv text
|
||||
*.md text diff=markdown
|
||||
*.txt text
|
||||
|
||||
|
||||
# Config/Serialisation
|
||||
.editorconfig text
|
||||
**/.editorconfig text
|
||||
*.ini text
|
||||
*.properties text
|
||||
*.json text
|
||||
*.toml text
|
||||
*.xml text
|
||||
*.yaml text
|
||||
*.yml text
|
||||
|
||||
|
||||
# Scripts
|
||||
*.bat text eol=crlf
|
||||
*.cmd text eol=crlf
|
||||
*.ps1 text eol=crlf
|
||||
*.bash text eol=lf
|
||||
*.fish text eol=lf
|
||||
*.sh text eol=lf
|
||||
*.zsh text eol=lf
|
||||
*.lua text
|
||||
*.php text
|
||||
*.python text
|
||||
*.sql text
|
||||
**/Dockerfile text eol=lf
|
||||
|
||||
|
||||
# Archives
|
||||
*.7z binary
|
||||
*.gz binary
|
||||
*.tar binary
|
||||
*.tar.gz binary
|
||||
*.tgz binary
|
||||
*.xz binary
|
||||
*.zip binary
|
||||
|
||||
|
||||
# Native binaries
|
||||
*.dll binary
|
||||
*.dylib binary
|
||||
*.exe binary
|
||||
*.so binary
|
||||
|
||||
|
||||
# Images
|
||||
*.eps binary
|
||||
*.gif binary
|
||||
*.ico binary
|
||||
*.jpg binary
|
||||
*.jpeg binary
|
||||
*.png binary
|
||||
*.svg text
|
||||
*.svgz binary
|
||||
*.tif binary
|
||||
*.tiff binary
|
||||
|
||||
|
||||
# Fonts
|
||||
*.eot binary
|
||||
*.otf binary
|
||||
*.ttf binary
|
||||
*.woff binary
|
||||
|
||||
|
||||
# Java
|
||||
*.gradle text diff=java
|
||||
*.gradle.kts text diff=java
|
||||
*.java text diff=java
|
||||
*.class binary
|
||||
*.ear binary
|
||||
*.jceks binary
|
||||
*.jks binary
|
||||
*.jar binary
|
||||
*.pak binary
|
||||
*.war binary
|
||||
*.jsp text
|
||||
*.jspf text
|
||||
*.jspx text
|
||||
*.tld text
|
||||
*.tag text
|
||||
*.tagx text
|
||||
|
||||
|
||||
# Web
|
||||
*.css text diff=css
|
||||
*.htm text diff=html
|
||||
*.html text diff=html
|
||||
*.js text
|
||||
|
||||
|
||||
# https://git-scm.com/docs/gitattributes#_export_ignore
|
||||
.gitattributes export-ignore
|
||||
.gitignore export-ignore
|
||||
.gitkeep export-ignore
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: github-actions
|
||||
directory: /
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: monday
|
||||
time: "09:00"
|
||||
commit-message:
|
||||
prefix: fix
|
||||
prefix-development: chore
|
||||
include: scope
|
||||
labels:
|
||||
- gha
|
||||
- dependencies
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
# Configuration for probot-stale - https://github.com/probot/stale
|
||||
|
||||
# Number of days of inactivity before an issue becomes stale
|
||||
daysUntilStale: 60
|
||||
|
||||
# Number of days of inactivity before a stale issue is closed
|
||||
daysUntilClose: 7
|
||||
|
||||
# Issues with these labels will never be considered stale
|
||||
exemptLabels:
|
||||
- pinned
|
||||
- security
|
||||
|
||||
# Label to use when marking an issue as stale
|
||||
staleLabel: wontfix
|
||||
|
||||
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||
markComment: >
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
recent activity. It will be closed in 7 days if no further activity occurs.
|
||||
Thank you for your contributions.
|
||||
|
||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||
closeComment: false
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
# SPDX-FileCopyrightText: © Vegard IT GmbH (https://vegardit.com)
|
||||
# SPDX-FileContributor: Sebastian Thomschke
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
# SPDX-ArtifactOfProjectHomePage: https://github.com/vegardit/docker-gitea-act-runner
|
||||
#
|
||||
# https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions
|
||||
name: Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- '**'
|
||||
tags-ignore:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- '**/*.md'
|
||||
- '.github/*.yml'
|
||||
schedule:
|
||||
# https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows
|
||||
- cron: '0 17 * * 3'
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
# https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/
|
||||
|
||||
env:
|
||||
DOCKER_IMAGE_REPO: vegardit/gitea-act-runner
|
||||
DOCKER_IMAGE_TAG: latest
|
||||
TRIVY_CACHE_DIR: ~/.trivy/cache
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Git Checkout
|
||||
uses: actions/checkout@v3 #https://github.com/actions/checkout
|
||||
|
||||
- name: Cache trivy cache
|
||||
uses: actions/cache@v3
|
||||
if: env.ACT != 'true' # https://github.com/nektos/act#skipping-steps
|
||||
with:
|
||||
path: ${{ env.TRIVY_CACHE_DIR }}
|
||||
# https://github.com/actions/cache/issues/342#issuecomment-673371329
|
||||
key: ${{ runner.os }}-trivy-${{ github.run_id }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-trivy-
|
||||
|
||||
- name: Configure fast APT repository mirror
|
||||
uses: vegardit/fast-apt-mirror.sh@v1
|
||||
|
||||
- name: Install dos2unix
|
||||
run: sudo apt-get install --no-install-recommends -y dos2unix
|
||||
|
||||
- name: Build ${{ env.DOCKER_IMAGE_REPO }}:${{ env.DOCKER_IMAGE_TAG }}
|
||||
env:
|
||||
DOCKER_REGISTRY: docker.io
|
||||
DOCKER_REGISTRY_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }}
|
||||
DOCKER_REGISTRY_TOKEN: ${{ secrets.DOCKER_HUB_TOKEN }}
|
||||
TRIVY_GITHUB_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
if [[ $GITHUB_REF_NAME == "main" && $ACT != "true" ]]; then
|
||||
export DOCKER_PUSH=1
|
||||
echo "$DOCKER_REGISTRY_TOKEN" | docker login -u="$DOCKER_REGISTRY_USERNAME" "$DOCKER_REGISTRY" --password-stdin
|
||||
fi
|
||||
bash build-image.sh
|
||||
|
||||
- name: Publish Docker image to GH registry
|
||||
if: ${{ github.ref_name == 'main' && !env.ACT }} # https://github.com/nektos/act#skipping-steps
|
||||
run: |
|
||||
set -eux
|
||||
|
||||
echo "${{ github.token }}" | docker login https://ghcr.io -u ${{ github.actor }} --password-stdin
|
||||
|
||||
docker image tag $DOCKER_IMAGE_REPO ghcr.io/$DOCKER_IMAGE_REPO
|
||||
docker push ghcr.io/$DOCKER_IMAGE_REPO
|
||||
|
||||
- name: Delete untagged images
|
||||
uses: actions/github-script@v6
|
||||
if: ${{ github.ref_name == 'main' && !env.ACT }} # https://github.com/nektos/act#skipping-steps
|
||||
with:
|
||||
github-token: ${{ secrets.GHA_DELETE_PACKAGES }}
|
||||
script: |
|
||||
const imageName = /[^/]*$/.exec(process.env.DOCKER_IMAGE_REPO)[0]
|
||||
const basePath = `/orgs/${{ github.repository_owner }}/packages/container/${imageName}/versions`
|
||||
for (version of (await github.request(`GET ${basePath}`, { per_page: 100 })).data) {
|
||||
if (version.metadata.container.tags.length == 0) {
|
||||
console.log(`deleting ${version.name}...`)
|
||||
const delResponse = await github.request(`DELETE ${basePath}/${version.id}`)
|
||||
console.log(`status: ${delResponse.status}`)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
# Local work folder that is not checked in
|
||||
_LOCAL/
|
||||
|
||||
.shared
|
||||
|
||||
# Eclipse
|
||||
.apt_generated/
|
||||
.checkstyle
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings/
|
||||
bin/
|
||||
**/.*.md.html
|
||||
|
||||
# IntelliJ
|
||||
.idea
|
||||
*.iml
|
||||
*.ipr
|
||||
*.iws
|
||||
|
||||
# NetBeans
|
||||
nb-configuration.xml
|
||||
|
||||
# Visual Studio Code
|
||||
.vscode
|
||||
|
||||
# OSX
|
||||
.DS_Store
|
||||
|
||||
# Vim
|
||||
*.swo
|
||||
*.swp
|
||||
|
||||
# patch
|
||||
*.orig
|
||||
*.rej
|
||||
|
|
@ -0,0 +1,128 @@
|
|||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
https://vegardit.com/about/legal/.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder](https://github.com/mozilla/diversity).
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
# Contributing
|
||||
|
||||
Thanks for your interest in contributing to this project!
|
||||
|
||||
We want to make contributing as easy and transparent as possible.
|
||||
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
Our code of conduct is described in [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
|
||||
|
||||
|
||||
## Issues
|
||||
|
||||
We use GitHub issues to track bugs and feature requests. Please ensure your description is clear and has sufficient instructions to be able to reproduce the issue.
|
||||
|
||||
|
||||
## Pull Requests
|
||||
|
||||
Before you make a substantial pull request, please file an issue and make sure someone from the team agrees that there is a problem or room for improvement.
|
||||
|
||||
|
||||
## License
|
||||
|
||||
By contributing your code, you agree to license your contribution under the [Apache License 2.0](LICENSE.txt).
|
||||
61
README.md
61
README.md
|
|
@ -1 +1,60 @@
|
|||
# docker-gitea-act-runner
|
||||
# vegardit/gitea-act-runner <a href="https://github.com/vegardit/docker-gitea-act-runner/" title="GitHub Repo"><img height="30" src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/github.svg?sanitize=true"></a>
|
||||
|
||||
[](https://github.com/vegardit/docker-gitea-act-runner/actions?query=workflow%3ABuild)
|
||||
[](#license)
|
||||
[](https://hub.docker.com/r/vegardit/gitea-act-runner)
|
||||
[](https://hub.docker.com/r/vegardit/gitea-act-runner)
|
||||
[](CODE_OF_CONDUCT.md)
|
||||
|
||||
1. [What is it?](#what-is-it)
|
||||
1. [License](#license)
|
||||
|
||||
|
||||
## <a name="what-is-it"></a>What is it?
|
||||
|
||||
`debian:stable-slim` based Docker image containing [Gitea](https://gitea.com)'s [act_runner](https://gitea.com/gitea/act_runner/)
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
Example `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
version: '3.8' # https://docs.docker.com/compose/compose-file/compose-versioning/
|
||||
|
||||
services:
|
||||
|
||||
gitea_act_runner:
|
||||
image: vegardit/gitea-act-runner:latest
|
||||
#image: ghcr.io/vegardit/gitea-act-runner:latest
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:rw
|
||||
- /my/path/to/data/dir:/data:rw # the config file is located at /data/.runner and needs to survive container restarts
|
||||
environment:
|
||||
TZ: "Europe/Berlin"
|
||||
# config parameters for initial runner registration:
|
||||
GITEA_INSTANCE_URL: 'https://gitea.example.com' # required
|
||||
GITEA_INSTANCE_INSECURE: '0' # optional, default is 0
|
||||
GITEA_RUNNER_REGISTRATION_TOKEN_FILE: 'path/to/file' # only required on first container start
|
||||
# or: GITEA_RUNNER_REGISTRATION_TOKEN: '<INSERT_TOKEN_HERE>'
|
||||
GITEA_RUNNER_NAME: '' # optional, defaults to the container's hostname
|
||||
GITEA_RUNNER_LABELS: '' # optional
|
||||
GITEA_RUNNER_UID: 1200 # optional, default is 1000
|
||||
GITEA_RUNNER_GID: 1200 # optional, default is 1000
|
||||
deploy:
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
delay: 5s
|
||||
```
|
||||
|
||||
|
||||
## <a name="license"></a>License
|
||||
|
||||
All files in this repository are released under the [Apache License 2.0](LICENSE.txt).
|
||||
|
||||
Individual files contain the following tag instead of the full license text:
|
||||
```
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
```
|
||||
|
||||
This enables machine processing of license information based on the SPDX License Identifiers that are available here: https://spdx.org/licenses/.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,61 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# SPDX-FileCopyrightText: © Vegard IT GmbH (https://vegardit.com)
|
||||
# SPDX-FileContributor: Sebastian Thomschke
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
# SPDX-ArtifactOfProjectHomePage: https://github.com/vegardit/docker-gitea-act-runner
|
||||
#
|
||||
|
||||
shared_lib="$(dirname $0)/.shared"
|
||||
[ -e "$shared_lib" ] || curl -sSf https://raw.githubusercontent.com/vegardit/docker-shared/v1/download.sh?_=$(date +%s) | bash -s v1 "$shared_lib" || exit 1
|
||||
source "$shared_lib/lib/build-image-init.sh"
|
||||
|
||||
|
||||
#################################################
|
||||
# specify target docker registry/repo
|
||||
#################################################
|
||||
docker_registry=${DOCKER_REGISTRY:-docker.io}
|
||||
image_repo=${DOCKER_REPO:-vegardit/gitea-act-runner}
|
||||
image_name=$image_repo:${DOCKER_IMAGE_TAG:-latest}
|
||||
|
||||
|
||||
#################################################
|
||||
# build the image
|
||||
#################################################
|
||||
echo "Building docker image [$image_name]..."
|
||||
if [[ $OSTYPE == "cygwin" || $OSTYPE == "msys" ]]; then
|
||||
project_root=$(cygpath -w "$project_root")
|
||||
fi
|
||||
|
||||
DOCKER_BUILDKIT=1 docker build "$project_root" \
|
||||
--file "image/Dockerfile" \
|
||||
--progress=plain \
|
||||
--pull \
|
||||
--build-arg INSTALL_SUPPORT_TOOLS=${INSTALL_SUPPORT_TOOLS:-0} \
|
||||
`# using the current date as value for BASE_LAYER_CACHE_KEY, i.e. the base layer cache (that holds system packages with security updates) will be invalidate once per day` \
|
||||
--build-arg BASE_LAYER_CACHE_KEY=$base_layer_cache_key \
|
||||
--build-arg BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") \
|
||||
--build-arg GIT_BRANCH="${GIT_BRANCH:-$(git rev-parse --abbrev-ref HEAD)}" \
|
||||
--build-arg GIT_COMMIT_DATE="$(date -d @$(git log -1 --format='%at') --utc +'%Y-%m-%d %H:%M:%S UTC')" \
|
||||
--build-arg GIT_COMMIT_HASH="$(git rev-parse --short HEAD)" \
|
||||
--build-arg GIT_REPO_URL="$(git config --get remote.origin.url)" \
|
||||
-t $image_name \
|
||||
"$@"
|
||||
|
||||
|
||||
#################################################
|
||||
# perform security audit
|
||||
#################################################
|
||||
if [[ "${DOCKER_AUDIT_IMAGE:-1}" == 1 ]]; then
|
||||
bash "$shared_lib/cmd/audit-image.sh" $image_name
|
||||
fi
|
||||
|
||||
|
||||
#################################################
|
||||
# push image with tags to remote docker image registry
|
||||
#################################################
|
||||
if [[ "${DOCKER_PUSH:-0}" == "1" ]]; then
|
||||
docker image tag $image_name $docker_registry/$image_name
|
||||
|
||||
docker push $docker_registry/$image_name
|
||||
fi
|
||||
|
|
@ -0,0 +1,162 @@
|
|||
#syntax=docker/dockerfile:1.4
|
||||
# see https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md
|
||||
# see https://docs.docker.com/engine/reference/builder/#syntax
|
||||
#
|
||||
# SPDX-FileCopyrightText: © Vegard IT GmbH (https://vegardit.com)
|
||||
# SPDX-FileContributor: Sebastian Thomschke
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
# SPDX-ArtifactOfProjectHomePage: https://github.com/vegardit/docker-gitea-act-runner
|
||||
#
|
||||
# https://hub.docker.com/_/debian?tab=tags&name=stable-slim
|
||||
|
||||
######################
|
||||
# runtime image base
|
||||
######################
|
||||
FROM debian:stable-slim as runtime-base-image
|
||||
|
||||
LABEL maintainer="Vegard IT GmbH (vegardit.com)"
|
||||
|
||||
USER root
|
||||
|
||||
SHELL ["/bin/bash", "-c"]
|
||||
|
||||
ARG BASE_LAYER_CACHE_KEY
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
ARG LC_ALL=C
|
||||
|
||||
RUN --mount=type=bind,source=.shared,target=/mnt/shared <<EOF
|
||||
|
||||
set -euo pipefail
|
||||
/mnt/shared/cmd/debian-install-os-updates.sh
|
||||
/mnt/shared/cmd/debian-install-support-tools.sh
|
||||
|
||||
echo "#################################################"
|
||||
echo "Installing ca-certificates, tini..."
|
||||
echo "#################################################"
|
||||
apt-get install --no-install-recommends -y ca-certificates sudo tini
|
||||
|
||||
echo "#################################################"
|
||||
echo "Adding [act] user..."
|
||||
echo "#################################################"
|
||||
addgroup --gid 1000 act
|
||||
adduser --uid 1000 --ingroup act --home /data --shell /bin/bash --disabled-password --gecos "" act
|
||||
adduser act sudo
|
||||
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
|
||||
|
||||
/mnt/shared/cmd/debian-cleanup.sh
|
||||
|
||||
EOF
|
||||
|
||||
|
||||
######################
|
||||
# build image
|
||||
######################
|
||||
|
||||
# https://hub.docker.com/_/python?tab=tags&name=3-slim
|
||||
FROM debian:stable-slim AS build-image
|
||||
|
||||
USER root
|
||||
|
||||
SHELL ["/bin/bash", "-c"]
|
||||
|
||||
ARG BASE_LAYER_CACHE_KEY
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
ARG LC_ALL=C
|
||||
ARG INSTALL_SUPPORT_TOOLS=0
|
||||
|
||||
ARG ACT_RUNNER_DOWNLOAD_URL=https://dl.gitea.com/act_runner/main/act_runner-main-linux-amd64
|
||||
ARG UPX_COMPRESS=true
|
||||
|
||||
RUN --mount=type=bind,source=.shared,target=/mnt/shared <<EOF
|
||||
|
||||
set -euo pipefail
|
||||
/mnt/shared/cmd/debian-install-os-updates.sh
|
||||
|
||||
echo "#################################################"
|
||||
echo "Installing tools..."
|
||||
echo "#################################################"
|
||||
apt-get install --no-install-recommends -y binutils ca-certificates curl xz-utils
|
||||
|
||||
if [[ $UPX_COMPRESS == "true" ]]; then
|
||||
echo "#################################################"
|
||||
echo "Downloading UPX..."
|
||||
echo "#################################################"
|
||||
mkdir /opt/upx
|
||||
upx_download_url=$(curl -fsSL https://api.github.com/repos/upx/upx/releases/latest | grep browser_download_url | grep amd64_linux.tar.xz | cut "-d\"" -f4)
|
||||
echo "Downloading [$upx_download_url]..."
|
||||
curl -fL $upx_download_url | tar Jxv -C /opt/upx --strip-components=1
|
||||
/opt/upx/upx --version
|
||||
fi
|
||||
|
||||
echo "#################################################"
|
||||
echo "Downloading Gitea act runner..."
|
||||
echo "#################################################"
|
||||
mkdir /opt/act
|
||||
curl -fsSL $ACT_RUNNER_DOWNLOAD_URL -o /opt/act/runner
|
||||
chmod 755 /opt/act/runner
|
||||
ls -l /opt/act/runner
|
||||
echo "Stripping..."
|
||||
strip --strip-unneeded /opt/act/runner
|
||||
ls -l /opt/act/runner
|
||||
if [[ $UPX_COMPRESS == "true" ]]; then
|
||||
/opt/upx/upx -9 /opt/act/runner
|
||||
fi
|
||||
/opt/act/runner --version
|
||||
|
||||
EOF
|
||||
|
||||
|
||||
######################
|
||||
# runtime image
|
||||
######################
|
||||
FROM runtime-base-image
|
||||
COPY --from=build-image /opt/act/runner /opt/act/runner
|
||||
|
||||
ARG BUILD_DATE
|
||||
ARG GIT_BRANCH
|
||||
ARG GIT_COMMIT_HASH
|
||||
ARG GIT_COMMIT_DATE
|
||||
ARG GIT_REPO_URL
|
||||
|
||||
LABEL \
|
||||
org.label-schema.schema-version="1.0" \
|
||||
org.label-schema.build-date=$BUILD_DATE \
|
||||
org.label-schema.vcs-ref=$GIT_COMMIT_HASH \
|
||||
org.label-schema.vcs-url=$GIT_REPO_URL
|
||||
|
||||
# Default configuration: can be overridden at the docker command line
|
||||
ENV \
|
||||
INIT_SH_FILE='' \
|
||||
#
|
||||
GITEA_RUNNER_NAME='' \
|
||||
GITEA_RUNNER_LABELS='' \
|
||||
GITEA_INSTANCE_INSECURE=0 \
|
||||
GITEA_RUNNER_UID=1000 \
|
||||
GITEA_RUNNER_GID=1000
|
||||
|
||||
RUN <<EOF
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
echo "#################################################"
|
||||
echo "Writing build_info..."
|
||||
echo "#################################################"
|
||||
echo -e "
|
||||
GIT_REPO: $GIT_REPO_URL
|
||||
GIT_BRANCH: $GIT_BRANCH
|
||||
GIT_COMMIT: $GIT_COMMIT_HASH @ $GIT_COMMIT_DATE
|
||||
IMAGE_BUILD: $BUILD_DATE" >/opt/build_info
|
||||
cat /opt/build_info
|
||||
|
||||
EOF
|
||||
|
||||
COPY image/*.sh /opt/
|
||||
COPY .shared/lib/bash-init.sh /opt/bash-init.sh
|
||||
|
||||
USER act
|
||||
|
||||
VOLUME [ "/data" ]
|
||||
|
||||
ENTRYPOINT ["/usr/bin/tini", "--"]
|
||||
|
||||
CMD ["/bin/bash", "/opt/run.sh"]
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# SPDX-FileCopyrightText: © Vegard IT GmbH (https://vegardit.com)
|
||||
# SPDX-FileContributor: Sebastian Thomschke
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
# SPDX-ArtifactOfProjectHomePage: https://github.com/vegardit/docker-gitea-act-runner
|
||||
#
|
||||
|
||||
source /opt/bash-init.sh
|
||||
|
||||
#################################################
|
||||
# print header
|
||||
#################################################
|
||||
cat <<'EOF'
|
||||
_____ _ _ _ _____
|
||||
/ ____(_) | /\ | | | __ \
|
||||
| | __ _| |_ ___ __ _ / \ ___| |_ | |__) | _ _ __ _ __ ___ _ __
|
||||
| | |_ | | __/ _ \/ _` | / /\ \ / __| __| | _ / | | | '_ \| '_ \ / _ \ '__|
|
||||
| |__| | | || __/ (_| | / ____ \ (__| |_ | | \ \ |_| | | | | | | | __/ |
|
||||
\_____|_|\__\___|\__,_| /_/ \_\___|\__| |_| \_\__,_|_| |_|_| |_|\___|_|
|
||||
EOF
|
||||
|
||||
cat /opt/build_info
|
||||
echo
|
||||
|
||||
log INFO "Timezone is $(date +"%Z %z")"
|
||||
log INFO "Hostname: $(hostname -f)"
|
||||
log INFO "IP Addresses: "
|
||||
awk '/32 host/ { if(uniq[ip]++ && ip != "127.0.0.1") print " - " ip } {ip=$2}' /proc/net/fib_trie
|
||||
|
||||
|
||||
#################################################################
|
||||
# Adjust UID/GID and file permissions based on env var config
|
||||
#################################################################
|
||||
if [ -n "${GITEA_RUNNER_UID:-}" ]; then
|
||||
effective_uid=$(id -u act)
|
||||
if [ "$GITEA_RUNNER_UID" != "$effective_uid" ]; then
|
||||
log INFO "Changing UID of user [act] from $effective_uid to $GITEA_RUNNER_UID..."
|
||||
sudo usermod -o -u "$GITEA_RUNNER_UID" act
|
||||
fi
|
||||
fi
|
||||
if [ -n "${GITEA_RUNNER_GID:-}" ]; then
|
||||
effective_gid=$(id -g act)
|
||||
if [ "$GITEA_RUNNER_GID" != "$effective_gid" ]; then
|
||||
log INFO "Changing GID of user [act] from $effective_gid to $GITEA_RUNNER_GID..."
|
||||
sudo usermod -o -u "$GITEA_RUNNER_GID" act
|
||||
fi
|
||||
fi
|
||||
sudo chown -R act:act /data
|
||||
|
||||
docker_group=$(stat -c '%G' /var/run/docker.sock)
|
||||
if [[ $docker_group == "UNKNOWN" ]]; then
|
||||
docker_gid=$(stat -c '%g' /var/run/docker.sock)
|
||||
docker_group="docker$docker_gid"
|
||||
log INFO "Creating group [$docker_group]..."
|
||||
sudo addgroup --gid $docker_gid $docker_group
|
||||
fi
|
||||
|
||||
if ! id -nG act | grep -qw "$docker_group"; then
|
||||
log INFO "Adding user [act] to group [$docker_group]..."
|
||||
sudo usermod -aG $docker_group act
|
||||
fi
|
||||
|
||||
|
||||
#################################################################
|
||||
# Launch the runner with adjusted UID/GID
|
||||
#################################################################
|
||||
exec sudo -u act -g act -E bash /opt/run_runner.sh
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# SPDX-FileCopyrightText: © Vegard IT GmbH (https://vegardit.com)
|
||||
# SPDX-FileContributor: Sebastian Thomschke
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
# SPDX-ArtifactOfProjectHomePage: https://github.com/vegardit/docker-gitea-act-runner
|
||||
#
|
||||
source /opt/bash-init.sh
|
||||
|
||||
log INFO "Effective user: $(id)"
|
||||
|
||||
cd /data
|
||||
|
||||
#################################################
|
||||
# load custom init script if specified
|
||||
#################################################
|
||||
if [[ -f $INIT_SH_FILE ]]; then
|
||||
log INFO "Loading [$INIT_SH_FILE]..."
|
||||
source "$INIT_SH_FILE"
|
||||
fi
|
||||
|
||||
|
||||
#################################################
|
||||
# register act runner if required
|
||||
#################################################
|
||||
if [[ ! -s .runner ]]; then
|
||||
if [[ ${GITEA_INSTANCE_INSECURE:-} == '1' ]]; then
|
||||
insecure_flag=--insecure
|
||||
fi
|
||||
if [[ -z ${GITEA_RUNNER_REGISTRATION_TOKEN:-} ]]; then
|
||||
read -r GITEA_RUNNER_REGISTRATION_TOKEN < "$GITEA_RUNNER_REGISTRATION_TOKEN_FILE"
|
||||
fi
|
||||
/opt/act/runner register \
|
||||
--instance "${GITEA_INSTANCE_URL}" \
|
||||
--token "${GITEA_RUNNER_REGISTRATION_TOKEN}" \
|
||||
--name "${GITEA_RUNNER_NAME}" \
|
||||
--labels "${GITEA_RUNNER_LABELS}" \
|
||||
$( [[ ${GITEA_INSTANCE_INSECURE:-} == '1' ]] && echo "--insecure" || true) \
|
||||
--no-interactive
|
||||
fi
|
||||
|
||||
|
||||
#################################################
|
||||
# run the act runner
|
||||
#################################################
|
||||
exec /opt/act/runner daemon
|
||||
Loading…
Reference in New Issue