mirror of
https://github.com/actions/actions-runner-controller.git
synced 2025-12-13 04:56:54 +00:00
Compare commits
7 Commits
gha-runner
...
actions-ru
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94065d2fc5 | ||
|
|
b1cc4da5dc | ||
|
|
8b7bfa5ffb | ||
|
|
52fc819339 | ||
|
|
215b245881 | ||
|
|
a3df23b07c | ||
|
|
f5c69654e7 |
2
.github/workflows/gha-e2e-tests.yaml
vendored
2
.github/workflows/gha-e2e-tests.yaml
vendored
@@ -16,7 +16,7 @@ env:
|
|||||||
TARGET_ORG: actions-runner-controller
|
TARGET_ORG: actions-runner-controller
|
||||||
TARGET_REPO: arc_e2e_test_dummy
|
TARGET_REPO: arc_e2e_test_dummy
|
||||||
IMAGE_NAME: "arc-test-image"
|
IMAGE_NAME: "arc-test-image"
|
||||||
IMAGE_VERSION: "0.4.0"
|
IMAGE_VERSION: "0.5.0"
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
# This will make sure we only apply the concurrency limits on pull requests
|
# This will make sure we only apply the concurrency limits on pull requests
|
||||||
|
|||||||
4
.github/workflows/gha-publish-chart.yaml
vendored
4
.github/workflows/gha-publish-chart.yaml
vendored
@@ -151,7 +151,7 @@ jobs:
|
|||||||
GHA_RUNNER_SCALE_SET_CONTROLLER_CHART_VERSION_TAG=$(cat charts/gha-runner-scale-set-controller/Chart.yaml | grep version: | cut -d " " -f 2)
|
GHA_RUNNER_SCALE_SET_CONTROLLER_CHART_VERSION_TAG=$(cat charts/gha-runner-scale-set-controller/Chart.yaml | grep version: | cut -d " " -f 2)
|
||||||
echo "GHA_RUNNER_SCALE_SET_CONTROLLER_CHART_VERSION_TAG=${GHA_RUNNER_SCALE_SET_CONTROLLER_CHART_VERSION_TAG}" >> $GITHUB_ENV
|
echo "GHA_RUNNER_SCALE_SET_CONTROLLER_CHART_VERSION_TAG=${GHA_RUNNER_SCALE_SET_CONTROLLER_CHART_VERSION_TAG}" >> $GITHUB_ENV
|
||||||
helm package charts/gha-runner-scale-set-controller/ --version="${GHA_RUNNER_SCALE_SET_CONTROLLER_CHART_VERSION_TAG}"
|
helm package charts/gha-runner-scale-set-controller/ --version="${GHA_RUNNER_SCALE_SET_CONTROLLER_CHART_VERSION_TAG}"
|
||||||
helm push gha-rs-controller-"${GHA_RUNNER_SCALE_SET_CONTROLLER_CHART_VERSION_TAG}".tgz oci://ghcr.io/${{ steps.resolve_parameters.outputs.repository_owner }}/actions-runner-controller-charts
|
helm push gha-runner-scale-set-controller-"${GHA_RUNNER_SCALE_SET_CONTROLLER_CHART_VERSION_TAG}".tgz oci://ghcr.io/${{ steps.resolve_parameters.outputs.repository_owner }}/actions-runner-controller-charts
|
||||||
|
|
||||||
- name: Job summary
|
- name: Job summary
|
||||||
run: |
|
run: |
|
||||||
@@ -200,7 +200,7 @@ jobs:
|
|||||||
GHA_RUNNER_SCALE_SET_CHART_VERSION_TAG=$(cat charts/gha-runner-scale-set/Chart.yaml | grep version: | cut -d " " -f 2)
|
GHA_RUNNER_SCALE_SET_CHART_VERSION_TAG=$(cat charts/gha-runner-scale-set/Chart.yaml | grep version: | cut -d " " -f 2)
|
||||||
echo "GHA_RUNNER_SCALE_SET_CHART_VERSION_TAG=${GHA_RUNNER_SCALE_SET_CHART_VERSION_TAG}" >> $GITHUB_ENV
|
echo "GHA_RUNNER_SCALE_SET_CHART_VERSION_TAG=${GHA_RUNNER_SCALE_SET_CHART_VERSION_TAG}" >> $GITHUB_ENV
|
||||||
helm package charts/gha-runner-scale-set/ --version="${GHA_RUNNER_SCALE_SET_CHART_VERSION_TAG}"
|
helm package charts/gha-runner-scale-set/ --version="${GHA_RUNNER_SCALE_SET_CHART_VERSION_TAG}"
|
||||||
helm push gha-rs-"${GHA_RUNNER_SCALE_SET_CHART_VERSION_TAG}".tgz oci://ghcr.io/${{ steps.resolve_parameters.outputs.repository_owner }}/actions-runner-controller-charts
|
helm push gha-runner-scale-set-"${GHA_RUNNER_SCALE_SET_CHART_VERSION_TAG}".tgz oci://ghcr.io/${{ steps.resolve_parameters.outputs.repository_owner }}/actions-runner-controller-charts
|
||||||
|
|
||||||
- name: Job summary
|
- name: Job summary
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ type: application
|
|||||||
# This is the chart version. This version number should be incremented each time you make changes
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
# to the chart and its templates, including the app version.
|
# to the chart and its templates, including the app version.
|
||||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
version: 0.23.3
|
version: 0.23.4
|
||||||
|
|
||||||
# Used as the default manager tag value when no tag property is provided in the values.yaml
|
# Used as the default manager tag value when no tag property is provided in the values.yaml
|
||||||
appVersion: 0.27.4
|
appVersion: 0.27.4
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ webhooks:
|
|||||||
{{- if .Values.scope.singleNamespace }}
|
{{- if .Values.scope.singleNamespace }}
|
||||||
namespaceSelector:
|
namespaceSelector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
name: {{ default .Release.Namespace .Values.scope.watchNamespace }}
|
kubernetes.io/metadata.name: {{ default .Release.Namespace .Values.scope.watchNamespace }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
clientConfig:
|
clientConfig:
|
||||||
{{- if .Values.admissionWebHooks.caBundle }}
|
{{- if .Values.admissionWebHooks.caBundle }}
|
||||||
@@ -50,7 +50,7 @@ webhooks:
|
|||||||
{{- if .Values.scope.singleNamespace }}
|
{{- if .Values.scope.singleNamespace }}
|
||||||
namespaceSelector:
|
namespaceSelector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
name: {{ default .Release.Namespace .Values.scope.watchNamespace }}
|
kubernetes.io/metadata.name: {{ default .Release.Namespace .Values.scope.watchNamespace }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
clientConfig:
|
clientConfig:
|
||||||
{{- if .Values.admissionWebHooks.caBundle }}
|
{{- if .Values.admissionWebHooks.caBundle }}
|
||||||
@@ -81,7 +81,7 @@ webhooks:
|
|||||||
{{- if .Values.scope.singleNamespace }}
|
{{- if .Values.scope.singleNamespace }}
|
||||||
namespaceSelector:
|
namespaceSelector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
name: {{ default .Release.Namespace .Values.scope.watchNamespace }}
|
kubernetes.io/metadata.name: {{ default .Release.Namespace .Values.scope.watchNamespace }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
clientConfig:
|
clientConfig:
|
||||||
{{- if .Values.admissionWebHooks.caBundle }}
|
{{- if .Values.admissionWebHooks.caBundle }}
|
||||||
@@ -112,7 +112,7 @@ webhooks:
|
|||||||
{{- if .Values.scope.singleNamespace }}
|
{{- if .Values.scope.singleNamespace }}
|
||||||
namespaceSelector:
|
namespaceSelector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
name: {{ default .Release.Namespace .Values.scope.watchNamespace }}
|
kubernetes.io/metadata.name: {{ default .Release.Namespace .Values.scope.watchNamespace }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
clientConfig:
|
clientConfig:
|
||||||
{{- if .Values.admissionWebHooks.caBundle }}
|
{{- if .Values.admissionWebHooks.caBundle }}
|
||||||
@@ -156,7 +156,7 @@ webhooks:
|
|||||||
{{- if .Values.scope.singleNamespace }}
|
{{- if .Values.scope.singleNamespace }}
|
||||||
namespaceSelector:
|
namespaceSelector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
name: {{ default .Release.Namespace .Values.scope.watchNamespace }}
|
kubernetes.io/metadata.name: {{ default .Release.Namespace .Values.scope.watchNamespace }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
clientConfig:
|
clientConfig:
|
||||||
{{- if .Values.admissionWebHooks.caBundle }}
|
{{- if .Values.admissionWebHooks.caBundle }}
|
||||||
@@ -187,7 +187,7 @@ webhooks:
|
|||||||
{{- if .Values.scope.singleNamespace }}
|
{{- if .Values.scope.singleNamespace }}
|
||||||
namespaceSelector:
|
namespaceSelector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
name: {{ default .Release.Namespace .Values.scope.watchNamespace }}
|
kubernetes.io/metadata.name: {{ default .Release.Namespace .Values.scope.watchNamespace }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
clientConfig:
|
clientConfig:
|
||||||
{{- if .Values.admissionWebHooks.caBundle }}
|
{{- if .Values.admissionWebHooks.caBundle }}
|
||||||
@@ -218,7 +218,7 @@ webhooks:
|
|||||||
{{- if .Values.scope.singleNamespace }}
|
{{- if .Values.scope.singleNamespace }}
|
||||||
namespaceSelector:
|
namespaceSelector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
name: {{ default .Release.Namespace .Values.scope.watchNamespace }}
|
kubernetes.io/metadata.name: {{ default .Release.Namespace .Values.scope.watchNamespace }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
clientConfig:
|
clientConfig:
|
||||||
{{- if .Values.admissionWebHooks.caBundle }}
|
{{- if .Values.admissionWebHooks.caBundle }}
|
||||||
|
|||||||
@@ -151,8 +151,7 @@ podDisruptionBudget:
|
|||||||
# PriorityClass: system-cluster-critical
|
# PriorityClass: system-cluster-critical
|
||||||
priorityClassName: ""
|
priorityClassName: ""
|
||||||
|
|
||||||
env:
|
# env:
|
||||||
{}
|
|
||||||
# specify additional environment variables for the controller pod.
|
# specify additional environment variables for the controller pod.
|
||||||
# It's possible to specify either key vale pairs e.g.:
|
# It's possible to specify either key vale pairs e.g.:
|
||||||
# http_proxy: "proxy.com:8080"
|
# http_proxy: "proxy.com:8080"
|
||||||
@@ -303,7 +302,7 @@ githubWebhookServer:
|
|||||||
# key: GITHUB_WEBHOOK_SECRET_TOKEN
|
# key: GITHUB_WEBHOOK_SECRET_TOKEN
|
||||||
# name: prod-gha-controller-webhook-token
|
# name: prod-gha-controller-webhook-token
|
||||||
# optional: true
|
# optional: true
|
||||||
env: {}
|
# env:
|
||||||
|
|
||||||
actionsMetrics:
|
actionsMetrics:
|
||||||
serviceAnnotations: {}
|
serviceAnnotations: {}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,15 @@
|
|||||||
|
# Visualizing Autoscaling Runner Scale Set metrics with Grafana
|
||||||
|
|
||||||
|
With metrics introduced in [gha-runner-scale-set-0.5.0](https://github.com/actions/actions-runner-controller/releases/tag/gha-runner-scale-set-0.5.0), you can now visualize the autoscaling behavior of your runner scale set with your tool of choice. This sample shows how to visualize the metrics with [Grafana](https://grafana.com/).
|
||||||
|
|
||||||
|
## Demo
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
We do not intend to provide a supported ARC dashboard. This is simply a reference and a demonstration for how you could leverage the metrics emitted by the controller-manager and listeners to visualize the autoscaling behavior of your runner scale set. We offer no promises of future upgrades to this sample.
|
||||||
|
|
||||||
|
1. Make sure to have [Grafana](https://grafana.com/docs/grafana/latest/installation/) and [Prometheus](https://prometheus.io/docs/prometheus/latest/installation/) running in your cluster.
|
||||||
|
2. Make sure that Prometheus is properly scraping the metrics endpoints of the controller-manager and listeners.
|
||||||
|
3. Import the [dashboard](ARC-Autoscaling-Runner-Set-Monitoring_1692627561838.json.json) into Grafana.
|
||||||
BIN
docs/gha-runner-scale-set-controller/samples/grafana-dashboard/grafana-sample.png
(Stored with Git LFS)
Normal file
BIN
docs/gha-runner-scale-set-controller/samples/grafana-dashboard/grafana-sample.png
(Stored with Git LFS)
Normal file
Binary file not shown.
@@ -634,7 +634,18 @@ func (c *Client) AcquireJobs(ctx context.Context, runnerScaleSetId int, messageQ
|
|||||||
}
|
}
|
||||||
|
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
return nil, ParseActionsErrorFromResponse(resp)
|
if resp.StatusCode != http.StatusUnauthorized {
|
||||||
|
return nil, ParseActionsErrorFromResponse(resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
defer resp.Body.Close()
|
||||||
|
body, err := io.ReadAll(resp.Body)
|
||||||
|
body = trimByteOrderMark(body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, &MessageQueueTokenExpiredError{msg: string(body)}
|
||||||
}
|
}
|
||||||
|
|
||||||
var acquiredJobs *Int64List
|
var acquiredJobs *Int64List
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package actions_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
@@ -84,6 +85,39 @@ func TestAcquireJobs(t *testing.T) {
|
|||||||
assert.NotNil(t, err)
|
assert.NotNil(t, err)
|
||||||
assert.Equalf(t, actualRetry, expectedRetry, "A retry was expected after the first request but got: %v", actualRetry)
|
assert.Equalf(t, actualRetry, expectedRetry, "A retry was expected after the first request but got: %v", actualRetry)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("Should return MessageQueueTokenExpiredError when http error is not Unauthorized", func(t *testing.T) {
|
||||||
|
want := []int64{1}
|
||||||
|
|
||||||
|
session := &actions.RunnerScaleSetSession{
|
||||||
|
RunnerScaleSet: &actions.RunnerScaleSet{Id: 1},
|
||||||
|
MessageQueueAccessToken: "abc",
|
||||||
|
}
|
||||||
|
requestIDs := want
|
||||||
|
|
||||||
|
server := newActionsServer(t, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if strings.HasSuffix(r.URL.Path, "/acquirablejobs") {
|
||||||
|
w.Write([]byte(`{"count": 1}`))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if r.Method == http.MethodPost {
|
||||||
|
http.Error(w, "Session expired", http.StatusUnauthorized)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
|
||||||
|
client, err := actions.NewClient(server.configURLForOrg("my-org"), auth)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = client.GetAcquirableJobs(ctx, 1)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
got, err := client.AcquireJobs(ctx, session.RunnerScaleSet.Id, session.MessageQueueAccessToken, requestIDs)
|
||||||
|
require.Error(t, err)
|
||||||
|
assert.Nil(t, got)
|
||||||
|
var expectedErr *actions.MessageQueueTokenExpiredError
|
||||||
|
assert.True(t, errors.As(err, &expectedErr))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetAcquirableJobs(t *testing.T) {
|
func TestGetAcquirableJobs(t *testing.T) {
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ RUN apt-get update -y \
|
|||||||
dnsutils \
|
dnsutils \
|
||||||
ftp \
|
ftp \
|
||||||
git \
|
git \
|
||||||
git-lfs \
|
|
||||||
iproute2 \
|
iproute2 \
|
||||||
iputils-ping \
|
iputils-ping \
|
||||||
iptables \
|
iptables \
|
||||||
@@ -56,6 +55,10 @@ RUN apt-get update -y \
|
|||||||
&& ln -sf /usr/bin/pip3 /usr/bin/pip \
|
&& ln -sf /usr/bin/pip3 /usr/bin/pip \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Download latest git-lfs version
|
||||||
|
RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \
|
||||||
|
apt-get install -y --no-install-recommends git-lfs
|
||||||
|
|
||||||
# Runner user
|
# Runner user
|
||||||
RUN adduser --disabled-password --gecos "" --uid $RUNNER_UID runner
|
RUN adduser --disabled-password --gecos "" --uid $RUNNER_UID runner
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ RUN apt-get update -y \
|
|||||||
curl \
|
curl \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
git \
|
git \
|
||||||
git-lfs \
|
|
||||||
iproute2 \
|
iproute2 \
|
||||||
iptables \
|
iptables \
|
||||||
jq \
|
jq \
|
||||||
@@ -33,6 +32,10 @@ RUN apt-get update -y \
|
|||||||
zip \
|
zip \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Download latest git-lfs version
|
||||||
|
RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \
|
||||||
|
apt-get install -y --no-install-recommends git-lfs
|
||||||
|
|
||||||
# Runner user
|
# Runner user
|
||||||
RUN adduser --disabled-password --gecos "" --uid $RUNNER_USER_UID runner
|
RUN adduser --disabled-password --gecos "" --uid $RUNNER_USER_UID runner
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ RUN apt-get update -y \
|
|||||||
dnsutils \
|
dnsutils \
|
||||||
ftp \
|
ftp \
|
||||||
git \
|
git \
|
||||||
git-lfs \
|
|
||||||
iproute2 \
|
iproute2 \
|
||||||
iputils-ping \
|
iputils-ping \
|
||||||
iptables \
|
iptables \
|
||||||
@@ -53,6 +52,10 @@ RUN apt-get update -y \
|
|||||||
&& ln -sf /usr/bin/pip3 /usr/bin/pip \
|
&& ln -sf /usr/bin/pip3 /usr/bin/pip \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Download latest git-lfs version
|
||||||
|
RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \
|
||||||
|
apt-get install -y --no-install-recommends git-lfs
|
||||||
|
|
||||||
# Runner user
|
# Runner user
|
||||||
RUN adduser --disabled-password --gecos "" --uid $RUNNER_UID runner \
|
RUN adduser --disabled-password --gecos "" --uid $RUNNER_UID runner \
|
||||||
&& groupadd docker --gid $DOCKER_GID \
|
&& groupadd docker --gid $DOCKER_GID \
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ RUN apt-get update -y \
|
|||||||
curl \
|
curl \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
git \
|
git \
|
||||||
git-lfs \
|
|
||||||
iptables \
|
iptables \
|
||||||
jq \
|
jq \
|
||||||
software-properties-common \
|
software-properties-common \
|
||||||
@@ -29,6 +28,10 @@ RUN apt-get update -y \
|
|||||||
zip \
|
zip \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Download latest git-lfs version
|
||||||
|
RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \
|
||||||
|
apt-get install -y --no-install-recommends git-lfs
|
||||||
|
|
||||||
# Runner user
|
# Runner user
|
||||||
RUN adduser --disabled-password --gecos "" --uid $RUNNER_USER_UID runner \
|
RUN adduser --disabled-password --gecos "" --uid $RUNNER_USER_UID runner \
|
||||||
&& groupadd docker --gid $DOCKER_GROUP_GID \
|
&& groupadd docker --gid $DOCKER_GROUP_GID \
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ RUN apt-get update -y \
|
|||||||
dnsutils \
|
dnsutils \
|
||||||
ftp \
|
ftp \
|
||||||
git \
|
git \
|
||||||
git-lfs \
|
|
||||||
iproute2 \
|
iproute2 \
|
||||||
iputils-ping \
|
iputils-ping \
|
||||||
jq \
|
jq \
|
||||||
@@ -50,6 +49,10 @@ RUN apt-get update -y \
|
|||||||
&& ln -sf /usr/bin/pip3 /usr/bin/pip \
|
&& ln -sf /usr/bin/pip3 /usr/bin/pip \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Download latest git-lfs version
|
||||||
|
RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \
|
||||||
|
apt-get install -y --no-install-recommends git-lfs
|
||||||
|
|
||||||
RUN adduser --disabled-password --gecos "" --uid $RUNNER_UID runner \
|
RUN adduser --disabled-password --gecos "" --uid $RUNNER_UID runner \
|
||||||
&& groupadd docker --gid $DOCKER_GID \
|
&& groupadd docker --gid $DOCKER_GID \
|
||||||
&& usermod -aG sudo runner \
|
&& usermod -aG sudo runner \
|
||||||
|
|||||||
@@ -20,13 +20,16 @@ RUN apt-get update -y \
|
|||||||
curl \
|
curl \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
git \
|
git \
|
||||||
git-lfs \
|
|
||||||
jq \
|
jq \
|
||||||
sudo \
|
sudo \
|
||||||
unzip \
|
unzip \
|
||||||
zip \
|
zip \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Download latest git-lfs version
|
||||||
|
RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \
|
||||||
|
apt-get install -y --no-install-recommends git-lfs
|
||||||
|
|
||||||
RUN adduser --disabled-password --gecos "" --uid $RUNNER_USER_UID runner \
|
RUN adduser --disabled-password --gecos "" --uid $RUNNER_USER_UID runner \
|
||||||
&& groupadd docker --gid $DOCKER_GROUP_GID \
|
&& groupadd docker --gid $DOCKER_GROUP_GID \
|
||||||
&& usermod -aG sudo runner \
|
&& usermod -aG sudo runner \
|
||||||
|
|||||||
Reference in New Issue
Block a user