Compare commits

...

14 Commits

Author SHA1 Message Date
LinuxServer-CI
a11064a29a Bot Updating Package Versions 2021-10-26 21:14:32 +02:00
Roxedus
3b78d9e7c6 Merge pull request #75 from linuxserver/focal-init 2021-10-26 21:05:01 +02:00
Roxedus
65a27cfcdb Update templated files 2021-10-25 20:50:57 +02:00
Roxedus
5b5bc16fe6 Focal init commit 2021-07-12 11:15:07 +02:00
LinuxServer-CI
d1ae5a93d7 Bot Updating Package Versions 2021-07-11 21:23:07 +00:00
aptalca
2a65149f2e Merge pull request #74 from linuxserver/node_14
Fix builds, bump node
2021-07-11 17:14:04 -04:00
Roxedus
074dafc216 Fix builds, bump node 2021-07-11 21:15:47 +02:00
LinuxServer-CI
34f67cb087 Bot Updating Package Versions 2021-07-11 12:28:17 +00:00
LinuxServer-CI
dcd097edab Bot Updating Package Versions 2021-07-04 12:36:02 +00:00
LinuxServer-CI
0d50ead3d7 Bot Updating Templated Files 2021-07-04 12:24:37 +00:00
LinuxServer-CI
fa2f58a1b0 Bot Updating Templated Files 2021-07-04 12:23:12 +00:00
LinuxServer-CI
37c1090ee6 Bot Updating Package Versions 2021-06-13 08:52:28 -04:00
LinuxServer-CI
df8bcc62c3 Bot Updating Package Versions 2021-05-30 09:13:45 -04:00
LinuxServer-CI
e297fb283c Bot Updating Package Versions 2021-05-22 00:22:54 +00:00
15 changed files with 407 additions and 264 deletions

20
.editorconfig Executable file
View File

@@ -0,0 +1,20 @@
# This file is globally distributed to all container image projects from
# https://github.com/linuxserver/docker-jenkins-builder/blob/master/.editorconfig
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
# trim_trailing_whitespace may cause unintended issues and should not be globally set true
trim_trailing_whitespace = false
[{Dockerfile*,**.yml}]
indent_style = space
indent_size = 2
[{**.sh,root/etc/cont-init.d/**,root/etc/services.d/**}]
indent_style = space
indent_size = 4

View File

@@ -4,7 +4,7 @@
* While contributing make sure to make all your changes before creating a Pull Request, as our pipeline builds each commit after the PR is open. * While contributing make sure to make all your changes before creating a Pull Request, as our pipeline builds each commit after the PR is open.
* Read, and fill the Pull Request template * Read, and fill the Pull Request template
* If this is a fix for a typo in code or documentation in the README please file an issue * If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR
* If the PR is addressing an existing issue include, closes #\<issue number>, in the body of the PR commit message * If the PR is addressing an existing issue include, closes #\<issue number>, in the body of the PR commit message
* If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://discord.gg/YWrKVTn) * If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://discord.gg/YWrKVTn)
@@ -24,7 +24,7 @@
## Readme ## Readme
If you would like to change our readme, please __**do not**__ directly edit the readme, as it is auto-generated on each commit. If you would like to change our readme, please __**do not**__ directly edit the readme, as it is auto-generated on each commit.
Instead edit the [readme-vars.yml](https://github.com/linuxserver/docker-code-server/edit/master/readme-vars.yml). Instead edit the [readme-vars.yml](https://github.com/linuxserver/docker-code-server/edit/focal/readme-vars.yml).
These variables are used in a template for our [Jenkins Builder](https://github.com/linuxserver/docker-jenkins-builder) as part of an ansible play. These variables are used in a template for our [Jenkins Builder](https://github.com/linuxserver/docker-jenkins-builder) as part of an ansible play.
Most of these variables are also carried over to [docs.linuxserver.io](https://docs.linuxserver.io/images/docker-code-server) Most of these variables are also carried over to [docs.linuxserver.io](https://docs.linuxserver.io/images/docker-code-server)
@@ -115,7 +115,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Update the changelog ## Update the changelog
If you are modifying the Dockerfiles or any of the startup scripts in [root](https://github.com/linuxserver/docker-code-server/tree/master/root), add an entry to the changelog If you are modifying the Dockerfiles or any of the startup scripts in [root](https://github.com/linuxserver/docker-code-server/tree/focal/root), add an entry to the changelog
```yml ```yml
changelogs: changelogs:

View File

@@ -6,7 +6,7 @@
<!--- Before submitting a pull request please check the following --> <!--- Before submitting a pull request please check the following -->
<!--- If this is a fix for a typo in code or documentation in the README please file an issue and let us sort it out we do not need a PR --> <!--- If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR -->
<!--- Ask yourself if this modification is something the whole userbase will benefit from, if this is a specific change for corner case functionality or plugins please look at making a Docker Mod or local script https://blog.linuxserver.io/2019/09/14/customizing-our-containers/ --> <!--- Ask yourself if this modification is something the whole userbase will benefit from, if this is a specific change for corner case functionality or plugins please look at making a Docker Mod or local script https://blog.linuxserver.io/2019/09/14/customizing-our-containers/ -->
<!--- That if the PR is addressing an existing issue include, closes #<issue number> , in the body of the PR commit message --> <!--- That if the PR is addressing an existing issue include, closes #<issue number> , in the body of the PR commit message -->
<!--- You have included links to any files / patches etc your PR may be using in the body of the PR commit message --> <!--- You have included links to any files / patches etc your PR may be using in the body of the PR commit message -->
@@ -21,7 +21,7 @@
------------------------------ ------------------------------
- [ ] I have read the [contributing](https://github.com/linuxserver/docker-code-server/blob/master/.github/CONTRIBUTING.md) guideline and understand that I have made the correct modifications - [ ] I have read the [contributing](https://github.com/linuxserver/docker-code-server/blob/focal/.github/CONTRIBUTING.md) guideline and understand that I have made the correct modifications
------------------------------ ------------------------------

View File

@@ -4,24 +4,24 @@ on:
workflow_dispatch: workflow_dispatch:
jobs: jobs:
external-trigger-master: external-trigger-focal:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2.3.3 - uses: actions/checkout@v2.3.3
- name: External Trigger - name: External Trigger
if: github.ref == 'refs/heads/master' if: github.ref == 'refs/heads/focal'
run: | run: |
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_CODE_SERVER_MASTER }}" ]; then if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_CODE_SERVER_FOCAL }}" ]; then
echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_CODE_SERVER_MASTER is set; skipping trigger. ****" echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_CODE_SERVER_FOCAL is set; skipping trigger. ****"
exit 0 exit 0
fi fi
echo "**** External trigger running off of master branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_CODE_SERVER_MASTER\". ****" echo "**** External trigger running off of focal branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_CODE_SERVER_FOCAL\". ****"
echo "**** Retrieving external version ****" echo "**** Retrieving external version ****"
EXT_RELEASE=$(curl -sX GET https://registry.yarnpkg.com/code-server | jq -r '."dist-tags".latest' | sed 's|^|v|') EXT_RELEASE=$(curl -sX GET https://registry.yarnpkg.com/code-server | jq -r '."dist-tags".latest' | sed 's|^|v|')
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
echo "**** Can't retrieve external version, exiting ****" echo "**** Can't retrieve external version, exiting ****"
FAILURE_REASON="Can't retrieve external version for code-server branch master" FAILURE_REASON="Can't retrieve external version for code-server branch focal"
GHA_TRIGGER_URL="https://github.com/linuxserver/docker-code-server/actions/runs/${{ github.run_id }}" GHA_TRIGGER_URL="https://github.com/linuxserver/docker-code-server/actions/runs/${{ github.run_id }}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680, curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n**Trigger URL:** '"${GHA_TRIGGER_URL}"' \n"}], "description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n**Trigger URL:** '"${GHA_TRIGGER_URL}"' \n"}],
@@ -64,13 +64,13 @@ jobs:
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then
echo "**** Version ${EXT_RELEASE} already pushed, exiting ****" echo "**** Version ${EXT_RELEASE} already pushed, exiting ****"
exit 0 exit 0
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-code-server/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-code-server/job/focal/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "**** New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting ****" echo "**** New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting ****"
exit 0 exit 0
else else
echo "**** New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build ****" echo "**** New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build ****"
response=$(curl -iX POST \ response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-code-server/job/master/buildWithParameters?PACKAGE_CHECK=false \ https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-code-server/job/focal/buildWithParameters?PACKAGE_CHECK=false \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|") --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "**** Jenkins job queue url: ${response%$'\r'} ****" echo "**** Jenkins job queue url: ${response%$'\r'} ****"
echo "**** Sleeping 10 seconds until job starts ****" echo "**** Sleeping 10 seconds until job starts ****"

View File

@@ -8,6 +8,6 @@ jobs:
steps: steps:
- uses: actions/first-interaction@v1 - uses: actions/first-interaction@v1
with: with:
issue-message: 'Thanks for opening your first issue here! Be sure to follow the [bug](https://github.com/linuxserver/docker-code-server/blob/master/.github/ISSUE_TEMPLATE/issue.bug.md) or [feature](https://github.com/linuxserver/docker-code-server/blob/master/.github/ISSUE_TEMPLATE/issue.feature.md) issue templates!' issue-message: 'Thanks for opening your first issue here! Be sure to follow the [bug](https://github.com/linuxserver/docker-code-server/blob/focal/.github/ISSUE_TEMPLATE/issue.bug.md) or [feature](https://github.com/linuxserver/docker-code-server/blob/focal/.github/ISSUE_TEMPLATE/issue.feature.md) issue templates!'
pr-message: 'Thanks for opening this pull request! Be sure to follow the [pull request template](https://github.com/linuxserver/docker-code-server/blob/master/.github/PULL_REQUEST_TEMPLATE.md)!' pr-message: 'Thanks for opening this pull request! Be sure to follow the [pull request template](https://github.com/linuxserver/docker-code-server/blob/focal/.github/PULL_REQUEST_TEMPLATE.md)!'
repo-token: ${{ secrets.GITHUB_TOKEN }} repo-token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -4,25 +4,25 @@ on:
workflow_dispatch: workflow_dispatch:
jobs: jobs:
package-trigger-master: package-trigger-focal:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2.3.3 - uses: actions/checkout@v2.3.3
- name: Package Trigger - name: Package Trigger
if: github.ref == 'refs/heads/master' if: github.ref == 'refs/heads/focal'
run: | run: |
if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_CODE_SERVER_MASTER }}" ]; then if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_CODE_SERVER_FOCAL }}" ]; then
echo "**** Github secret PAUSE_PACKAGE_TRIGGER_CODE_SERVER_MASTER is set; skipping trigger. ****" echo "**** Github secret PAUSE_PACKAGE_TRIGGER_CODE_SERVER_FOCAL is set; skipping trigger. ****"
exit 0 exit 0
fi fi
if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-code-server/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-code-server/job/focal/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "**** There already seems to be an active build on Jenkins; skipping package trigger ****" echo "**** There already seems to be an active build on Jenkins; skipping package trigger ****"
exit 0 exit 0
fi fi
echo "**** Package trigger running off of master branch. To disable, set a Github secret named \"PAUSE_PACKAGE_TRIGGER_CODE_SERVER_MASTER\". ****" echo "**** Package trigger running off of focal branch. To disable, set a Github secret named \"PAUSE_PACKAGE_TRIGGER_CODE_SERVER_FOCAL\". ****"
response=$(curl -iX POST \ response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-code-server/job/master/buildWithParameters?PACKAGE_CHECK=true \ https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-code-server/job/focal/buildWithParameters?PACKAGE_CHECK=true \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|") --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "**** Jenkins job queue url: ${response%$'\r'} ****" echo "**** Jenkins job queue url: ${response%$'\r'} ****"
echo "**** Sleeping 10 seconds until job starts ****" echo "**** Sleeping 10 seconds until job starts ****"

View File

@@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/stale@v1 - uses: actions/stale@v3
with: with:
stale-issue-message: "This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions." stale-issue-message: "This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions."
stale-pr-message: "This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions." stale-pr-message: "This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions."

View File

@@ -1,4 +1,4 @@
FROM ghcr.io/linuxserver/baseimage-ubuntu:bionic FROM ghcr.io/linuxserver/baseimage-ubuntu:focal
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@@ -16,7 +16,7 @@ RUN \
apt-get install -y \ apt-get install -y \
gnupg && \ gnupg && \
curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - && \ curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - && \
echo 'deb https://deb.nodesource.com/node_12.x bionic main' \ echo 'deb https://deb.nodesource.com/node_14.x focal main' \
> /etc/apt/sources.list.d/nodesource.list && \ > /etc/apt/sources.list.d/nodesource.list && \
curl -s https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ curl -s https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo 'deb https://dl.yarnpkg.com/debian/ stable main' \ echo 'deb https://dl.yarnpkg.com/debian/ stable main' \
@@ -25,10 +25,11 @@ RUN \
apt-get update && \ apt-get update && \
apt-get install -y \ apt-get install -y \
build-essential \ build-essential \
libsecret-1-dev \
libx11-dev \ libx11-dev \
libxkbfile-dev \ libxkbfile-dev \
libsecret-1-dev \ pkg-config \
pkg-config && \ python3 && \
echo "**** install runtime dependencies ****" && \ echo "**** install runtime dependencies ****" && \
apt-get install -y \ apt-get install -y \
git \ git \
@@ -44,6 +45,7 @@ RUN \
| jq -r '."dist-tags".latest' | sed 's|^|v|'); \ | jq -r '."dist-tags".latest' | sed 's|^|v|'); \
fi && \ fi && \
CODE_VERSION=$(echo "$CODE_RELEASE" | awk '{print substr($1,2); }') && \ CODE_VERSION=$(echo "$CODE_RELEASE" | awk '{print substr($1,2); }') && \
npm config set python python3 \
yarn config set network-timeout 600000 -g && \ yarn config set network-timeout 600000 -g && \
yarn --production --verbose --frozen-lockfile global add code-server@"$CODE_VERSION" && \ yarn --production --verbose --frozen-lockfile global add code-server@"$CODE_VERSION" && \
yarn cache clean && \ yarn cache clean && \
@@ -56,6 +58,7 @@ RUN \
pkg-config && \ pkg-config && \
apt-get clean && \ apt-get clean && \
rm -rf \ rm -rf \
/config/* \
/tmp/* \ /tmp/* \
/var/lib/apt/lists/* \ /var/lib/apt/lists/* \
/var/tmp/* /var/tmp/*

View File

@@ -1,4 +1,4 @@
FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-bionic FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-focal
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@@ -16,7 +16,7 @@ RUN \
apt-get install -y \ apt-get install -y \
gnupg && \ gnupg && \
curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - && \ curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - && \
echo 'deb https://deb.nodesource.com/node_12.x bionic main' \ echo 'deb https://deb.nodesource.com/node_14.x focal main' \
> /etc/apt/sources.list.d/nodesource.list && \ > /etc/apt/sources.list.d/nodesource.list && \
curl -s https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ curl -s https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo 'deb https://dl.yarnpkg.com/debian/ stable main' \ echo 'deb https://dl.yarnpkg.com/debian/ stable main' \
@@ -25,10 +25,11 @@ RUN \
apt-get update && \ apt-get update && \
apt-get install -y \ apt-get install -y \
build-essential \ build-essential \
libsecret-1-dev \
libx11-dev \ libx11-dev \
libxkbfile-dev \ libxkbfile-dev \
libsecret-1-dev \ pkg-config \
pkg-config && \ python3 && \
echo "**** install runtime dependencies ****" && \ echo "**** install runtime dependencies ****" && \
apt-get install -y \ apt-get install -y \
git \ git \
@@ -44,6 +45,7 @@ RUN \
| jq -r '."dist-tags".latest' | sed 's|^|v|'); \ | jq -r '."dist-tags".latest' | sed 's|^|v|'); \
fi && \ fi && \
CODE_VERSION=$(echo "$CODE_RELEASE" | awk '{print substr($1,2); }') && \ CODE_VERSION=$(echo "$CODE_RELEASE" | awk '{print substr($1,2); }') && \
npm config set python python3 \
yarn config set network-timeout 600000 -g && \ yarn config set network-timeout 600000 -g && \
yarn --production --verbose --frozen-lockfile global add code-server@"$CODE_VERSION" && \ yarn --production --verbose --frozen-lockfile global add code-server@"$CODE_VERSION" && \
yarn cache clean && \ yarn cache clean && \
@@ -56,6 +58,7 @@ RUN \
pkg-config && \ pkg-config && \
apt-get clean && \ apt-get clean && \
rm -rf \ rm -rf \
/config/* \
/tmp/* \ /tmp/* \
/var/lib/apt/lists/* \ /var/lib/apt/lists/* \
/var/tmp/* /var/tmp/*

View File

@@ -1,4 +1,4 @@
FROM ghcr.io/linuxserver/baseimage-ubuntu:arm32v7-bionic FROM ghcr.io/linuxserver/baseimage-ubuntu:arm32v7-focal
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@@ -16,7 +16,7 @@ RUN \
apt-get install -y \ apt-get install -y \
gnupg && \ gnupg && \
curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - && \ curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - && \
echo 'deb https://deb.nodesource.com/node_12.x bionic main' \ echo 'deb https://deb.nodesource.com/node_14.x focal main' \
> /etc/apt/sources.list.d/nodesource.list && \ > /etc/apt/sources.list.d/nodesource.list && \
curl -s https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ curl -s https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo 'deb https://dl.yarnpkg.com/debian/ stable main' \ echo 'deb https://dl.yarnpkg.com/debian/ stable main' \
@@ -25,10 +25,11 @@ RUN \
apt-get update && \ apt-get update && \
apt-get install -y \ apt-get install -y \
build-essential \ build-essential \
libsecret-1-dev \
libx11-dev \ libx11-dev \
libxkbfile-dev \ libxkbfile-dev \
libsecret-1-dev \ pkg-config \
pkg-config && \ python3 && \
echo "**** install runtime dependencies ****" && \ echo "**** install runtime dependencies ****" && \
apt-get install -y \ apt-get install -y \
git \ git \
@@ -44,6 +45,7 @@ RUN \
| jq -r '."dist-tags".latest' | sed 's|^|v|'); \ | jq -r '."dist-tags".latest' | sed 's|^|v|'); \
fi && \ fi && \
CODE_VERSION=$(echo "$CODE_RELEASE" | awk '{print substr($1,2); }') && \ CODE_VERSION=$(echo "$CODE_RELEASE" | awk '{print substr($1,2); }') && \
npm config set python python3 \
yarn config set network-timeout 600000 -g && \ yarn config set network-timeout 600000 -g && \
yarn --production --verbose --frozen-lockfile global add code-server@"$CODE_VERSION" && \ yarn --production --verbose --frozen-lockfile global add code-server@"$CODE_VERSION" && \
yarn cache clean && \ yarn cache clean && \
@@ -56,6 +58,7 @@ RUN \
pkg-config && \ pkg-config && \
apt-get clean && \ apt-get clean && \
rm -rf \ rm -rf \
/config/* \
/tmp/* \ /tmp/* \
/var/lib/apt/lists/* \ /var/lib/apt/lists/* \
/var/tmp/* /var/tmp/*

165
Jenkinsfile vendored
View File

@@ -16,6 +16,7 @@ pipeline {
GITHUB_TOKEN=credentials('498b4638-2d02-4ce5-832d-8a57d01d97ab') GITHUB_TOKEN=credentials('498b4638-2d02-4ce5-832d-8a57d01d97ab')
GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0') GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0')
GITLAB_NAMESPACE=credentials('gitlab-namespace-id') GITLAB_NAMESPACE=credentials('gitlab-namespace-id')
SCARF_TOKEN=credentials('scarf_api_key')
CONTAINER_NAME = 'code-server' CONTAINER_NAME = 'code-server'
BUILD_VERSION_ARG = 'CODE_RELEASE' BUILD_VERSION_ARG = 'CODE_RELEASE'
LS_USER = 'linuxserver' LS_USER = 'linuxserver'
@@ -55,7 +56,7 @@ pipeline {
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/' env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/'
env.PULL_REQUEST = env.CHANGE_ID env.PULL_REQUEST = env.CHANGE_ID
env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.md ./.github/ISSUE_TEMPLATE/issue.feature.md ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/stale.yml ./.github/workflows/external_trigger.yml ./.github/workflows/package_trigger.yml' env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.md ./.github/ISSUE_TEMPLATE/issue.feature.md ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/stale.yml ./.github/workflows/external_trigger.yml ./.github/workflows/package_trigger.yml'
} }
script{ script{
env.LS_RELEASE_NUMBER = sh( env.LS_RELEASE_NUMBER = sh(
@@ -116,13 +117,30 @@ pipeline {
env.EXT_RELEASE_CLEAN = sh( env.EXT_RELEASE_CLEAN = sh(
script: '''echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''', script: '''echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''',
returnStdout: true).trim() returnStdout: true).trim()
env.SEMVER = (new Date()).format('YYYY.MM.dd')
def semver = env.EXT_RELEASE_CLEAN =~ /(\d+)\.(\d+)\.(\d+)$/
if (semver.find()) {
env.SEMVER = "${semver[0][1]}.${semver[0][2]}.${semver[0][3]}"
} else {
semver = env.EXT_RELEASE_CLEAN =~ /(\d+)\.(\d+)(?:\.(\d+))?(.*)$/
if (semver.find()) {
if (semver[0][3]) {
env.SEMVER = "${semver[0][1]}.${semver[0][2]}.${semver[0][3]}"
} else if (!semver[0][3] && !semver[0][4]) {
env.SEMVER = "${semver[0][1]}.${semver[0][2]}.${(new Date()).format('YYYYMMdd')}"
}
}
}
println("SEMVER: ${env.SEMVER}")
} }
} }
} }
// If this is a master build use live docker endpoints // If this is a focal build use live docker endpoints
stage("Set ENV live build"){ stage("Set ENV live build"){
when { when {
branch "master" branch "focal"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
} }
steps { steps {
@@ -130,6 +148,7 @@ pipeline {
env.IMAGE = env.DOCKERHUB_IMAGE env.IMAGE = env.DOCKERHUB_IMAGE
env.GITHUBIMAGE = 'ghcr.io/' + env.LS_USER + '/' + env.CONTAINER_NAME env.GITHUBIMAGE = 'ghcr.io/' + env.LS_USER + '/' + env.CONTAINER_NAME
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/' + env.CONTAINER_NAME env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/' + env.CONTAINER_NAME
env.QUAYIMAGE = 'quay.io/linuxserver.io/' + env.CONTAINER_NAME
if (env.MULTIARCH == 'true') { if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
} else { } else {
@@ -144,7 +163,7 @@ pipeline {
// If this is a dev build use dev docker endpoints // If this is a dev build use dev docker endpoints
stage("Set ENV dev build"){ stage("Set ENV dev build"){
when { when {
not {branch "master"} not {branch "focal"}
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
} }
steps { steps {
@@ -152,6 +171,7 @@ pipeline {
env.IMAGE = env.DEV_DOCKERHUB_IMAGE env.IMAGE = env.DEV_DOCKERHUB_IMAGE
env.GITHUBIMAGE = 'ghcr.io/' + env.LS_USER + '/lsiodev-' + env.CONTAINER_NAME env.GITHUBIMAGE = 'ghcr.io/' + env.LS_USER + '/lsiodev-' + env.CONTAINER_NAME
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lsiodev-' + env.CONTAINER_NAME env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lsiodev-' + env.CONTAINER_NAME
env.QUAYIMAGE = 'quay.io/linuxserver.io/lsiodev-' + env.CONTAINER_NAME
if (env.MULTIARCH == 'true') { if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
} else { } else {
@@ -174,6 +194,7 @@ pipeline {
env.IMAGE = env.PR_DOCKERHUB_IMAGE env.IMAGE = env.PR_DOCKERHUB_IMAGE
env.GITHUBIMAGE = 'ghcr.io/' + env.LS_USER + '/lspipepr-' + env.CONTAINER_NAME env.GITHUBIMAGE = 'ghcr.io/' + env.LS_USER + '/lspipepr-' + env.CONTAINER_NAME
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME
env.QUAYIMAGE = 'quay.io/linuxserver.io/lspipepr-' + env.CONTAINER_NAME
if (env.MULTIARCH == 'true') { if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST
} else { } else {
@@ -219,7 +240,7 @@ pipeline {
// Use helper containers to render templated files // Use helper containers to render templated files
stage('Update-Templates') { stage('Update-Templates') {
when { when {
branch "master" branch "focal"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
expression { expression {
env.CONTAINER_NAME != null env.CONTAINER_NAME != null
@@ -230,13 +251,13 @@ pipeline {
set -e set -e
TEMPDIR=$(mktemp -d) TEMPDIR=$(mktemp -d)
docker pull ghcr.io/linuxserver/jenkins-builder:latest docker pull ghcr.io/linuxserver/jenkins-builder:latest
docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=master -v ${TEMPDIR}:/ansible/jenkins ghcr.io/linuxserver/jenkins-builder:latest docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=focal -v ${TEMPDIR}:/ansible/jenkins ghcr.io/linuxserver/jenkins-builder:latest
# Stage 1 - Jenkinsfile update # Stage 1 - Jenkinsfile update
if [[ "$(md5sum Jenkinsfile | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile | awk '{ print $1 }')" ]]; then if [[ "$(md5sum Jenkinsfile | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile | awk '{ print $1 }')" ]]; then
mkdir -p ${TEMPDIR}/repo mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO} git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO} cd ${TEMPDIR}/repo/${LS_REPO}
git checkout -f master git checkout -f focal
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile ${TEMPDIR}/repo/${LS_REPO}/ cp ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile ${TEMPDIR}/repo/${LS_REPO}/
git add Jenkinsfile git add Jenkinsfile
git commit -m 'Bot Updating Templated Files' git commit -m 'Bot Updating Templated Files'
@@ -259,8 +280,7 @@ pipeline {
mkdir -p ${TEMPDIR}/repo mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO} git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO} cd ${TEMPDIR}/repo/${LS_REPO}
git checkout -f master git checkout -f focal
cd ${TEMPDIR}/docker-${CONTAINER_NAME}
for i in ${TEMPLATES_TO_DELETE}; do for i in ${TEMPLATES_TO_DELETE}; do
git rm "${i}" git rm "${i}"
done done
@@ -281,7 +301,7 @@ pipeline {
mkdir -p ${TEMPDIR}/repo mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO} git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO} cd ${TEMPDIR}/repo/${LS_REPO}
git checkout -f master git checkout -f focal
cd ${TEMPDIR}/docker-${CONTAINER_NAME} cd ${TEMPDIR}/docker-${CONTAINER_NAME}
mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/workflows mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/workflows
mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/ISSUE_TEMPLATE mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/ISSUE_TEMPLATE
@@ -337,7 +357,7 @@ pipeline {
// Exit the build if the Templated files were just updated // Exit the build if the Templated files were just updated
stage('Template-exit') { stage('Template-exit') {
when { when {
branch "master" branch "focal"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
environment name: 'FILES_UPDATED', value: 'true' environment name: 'FILES_UPDATED', value: 'true'
expression { expression {
@@ -370,13 +390,57 @@ pipeline {
"visibility":"public"}' ''' "visibility":"public"}' '''
} }
} }
/* #######################
Scarf.sh package registry
####################### */
// Add package to Scarf.sh and set permissions
stage("Scarf.sh package registry"){
when {
branch "focal"
environment name: 'EXIT_STATUS', value: ''
}
steps{
sh '''#! /bin/bash
set -e
PACKAGE_UUID=$(curl -X GET -H "Authorization: Bearer ${SCARF_TOKEN}" https://scarf.sh/api/v1/packages | jq -r '.[] | select(.name=="linuxserver/code-server") | .uuid')
if [ -z "${PACKAGE_UUID}" ]; then
echo "Adding package to Scarf.sh"
PACKAGE_UUID=$(curl -sX POST https://scarf.sh/api/v1/packages \
-H "Authorization: Bearer ${SCARF_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"name":"linuxserver/code-server",\
"shortDescription":"example description",\
"libraryType":"docker",\
"website":"https://github.com/linuxserver/docker-code-server",\
"backendUrl":"https://ghcr.io/linuxserver/code-server",\
"publicUrl":"https://lscr.io/linuxserver/code-server"}' \
| jq -r .uuid)
else
echo "Package already exists on Scarf.sh"
fi
echo "Setting permissions on Scarf.sh for package ${PACKAGE_UUID}"
curl -X POST https://scarf.sh/api/v1/packages/${PACKAGE_UUID}/permissions \
-H "Authorization: Bearer ${SCARF_TOKEN}" \
-H "Content-Type: application/json" \
-d '[{"userQuery":"Spad","permissionLevel":"admin"},\
{"userQuery":"roxedus","permissionLevel":"admin"},\
{"userQuery":"nemchik","permissionLevel":"admin"},\
{"userQuery":"driz","permissionLevel":"admin"},\
{"userQuery":"aptalca","permissionLevel":"admin"},\
{"userQuery":"saarg","permissionLevel":"admin"},\
{"userQuery":"Stark","permissionLevel":"admin"}]'
'''
}
}
/* ############### /* ###############
Build Container Build Container
############### */ ############### */
// Build Docker container for push to LS Repo // Build Docker container for push to LS Repo
stage('Build-Single') { stage('Build-Single') {
when { when {
environment name: 'MULTIARCH', value: 'false' expression {
env.MULTIARCH == 'false' || params.PACKAGE_CHECK == 'true'
}
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
steps { steps {
@@ -401,7 +465,10 @@ pipeline {
// Build MultiArch Docker containers for push to LS Repo // Build MultiArch Docker containers for push to LS Repo
stage('Build-Multi') { stage('Build-Multi') {
when { when {
environment name: 'MULTIARCH', value: 'true' allOf {
environment name: 'MULTIARCH', value: 'true'
expression { params.PACKAGE_CHECK == 'false' }
}
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
parallel { parallel {
@@ -498,7 +565,7 @@ pipeline {
// Take the image we just built and dump package versions for comparison // Take the image we just built and dump package versions for comparison
stage('Update-packages') { stage('Update-packages') {
when { when {
branch "master" branch "focal"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
@@ -506,7 +573,7 @@ pipeline {
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
TEMPDIR=$(mktemp -d) TEMPDIR=$(mktemp -d)
if [ "${MULTIARCH}" == "true" ]; then if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ]; then
LOCAL_CONTAINER=${IMAGE}:amd64-${META_TAG} LOCAL_CONTAINER=${IMAGE}:amd64-${META_TAG}
else else
LOCAL_CONTAINER=${IMAGE}:${META_TAG} LOCAL_CONTAINER=${IMAGE}:${META_TAG}
@@ -521,12 +588,21 @@ pipeline {
apt list -qq --installed | sed "s#/.*now ##g" | cut -d" " -f1 > /tmp/package_versions.txt && \ apt list -qq --installed | sed "s#/.*now ##g" | cut -d" " -f1 > /tmp/package_versions.txt && \
sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \ sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \
chmod 777 /tmp/package_versions.txt' chmod 777 /tmp/package_versions.txt'
elif [ "${DIST_IMAGE}" == "fedora" ]; then
docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
rpm -qa > /tmp/package_versions.txt && \
sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \
chmod 777 /tmp/package_versions.txt'
elif [ "${DIST_IMAGE}" == "arch" ]; then
docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
pacman -Q > /tmp/package_versions.txt && \
chmod 777 /tmp/package_versions.txt'
fi fi
NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 ) NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 )
echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github" echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github"
if [ "${NEW_PACKAGE_TAG}" != "${PACKAGE_TAG}" ]; then if [ "${NEW_PACKAGE_TAG}" != "${PACKAGE_TAG}" ]; then
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/${LS_REPO} git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/${LS_REPO}
git --git-dir ${TEMPDIR}/${LS_REPO}/.git checkout -f master git --git-dir ${TEMPDIR}/${LS_REPO}/.git checkout -f focal
cp ${TEMPDIR}/package_versions.txt ${TEMPDIR}/${LS_REPO}/ cp ${TEMPDIR}/package_versions.txt ${TEMPDIR}/${LS_REPO}/
cd ${TEMPDIR}/${LS_REPO}/ cd ${TEMPDIR}/${LS_REPO}/
wait wait
@@ -550,7 +626,7 @@ pipeline {
// Exit the build if the package file was just updated // Exit the build if the package file was just updated
stage('PACKAGE-exit') { stage('PACKAGE-exit') {
when { when {
branch "master" branch "focal"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
environment name: 'PACKAGE_UPDATED', value: 'true' environment name: 'PACKAGE_UPDATED', value: 'true'
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
@@ -558,7 +634,7 @@ pipeline {
steps { steps {
sh '''#! /bin/bash sh '''#! /bin/bash
echo "Packages were updated. Cleaning up the image and exiting." echo "Packages were updated. Cleaning up the image and exiting."
if [ "${MULTIARCH}" == "true" ]; then if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ]; then
docker rmi ${IMAGE}:amd64-${META_TAG} docker rmi ${IMAGE}:amd64-${META_TAG}
else else
docker rmi ${IMAGE}:${META_TAG} docker rmi ${IMAGE}:${META_TAG}
@@ -571,7 +647,7 @@ pipeline {
// Exit the build if this is just a package check and there are no changes to push // Exit the build if this is just a package check and there are no changes to push
stage('PACKAGECHECK-exit') { stage('PACKAGECHECK-exit') {
when { when {
branch "master" branch "focal"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
environment name: 'PACKAGE_UPDATED', value: 'false' environment name: 'PACKAGE_UPDATED', value: 'false'
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
@@ -582,7 +658,7 @@ pipeline {
steps { steps {
sh '''#! /bin/bash sh '''#! /bin/bash
echo "There are no package updates. Cleaning up the image and exiting." echo "There are no package updates. Cleaning up the image and exiting."
if [ "${MULTIARCH}" == "true" ]; then if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ]; then
docker rmi ${IMAGE}:amd64-${META_TAG} docker rmi ${IMAGE}:amd64-${META_TAG}
else else
docker rmi ${IMAGE}:${META_TAG} docker rmi ${IMAGE}:${META_TAG}
@@ -657,6 +733,12 @@ pipeline {
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207', credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER', usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS' passwordVariable: 'DOCKERPASS'
],
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
] ]
]) { ]) {
retry(5) { retry(5) {
@@ -665,22 +747,26 @@ pipeline {
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG} docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG} docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
docker push ${PUSHIMAGE}:latest docker push ${PUSHIMAGE}:latest
docker push ${PUSHIMAGE}:${META_TAG} docker push ${PUSHIMAGE}:${META_TAG}
docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG} docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
docker push ${PUSHIMAGE}:${SEMVER}
done done
''' '''
} }
sh '''#! /bin/bash sh '''#! /bin/bash
for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
docker rmi \ docker rmi \
${DELETEIMAGE}:${META_TAG} \ ${DELETEIMAGE}:${META_TAG} \
${DELETEIMAGE}:${EXT_RELEASE_TAG} \ ${DELETEIMAGE}:${EXT_RELEASE_TAG} \
${DELETEIMAGE}:latest || : ${DELETEIMAGE}:latest \
${DELETEIMAGE}:${SEMVER} || :
done done
''' '''
} }
@@ -699,6 +785,12 @@ pipeline {
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207', credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER', usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS' passwordVariable: 'DOCKERPASS'
],
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
] ]
]) { ]) {
retry(5) { retry(5) {
@@ -707,13 +799,14 @@ pipeline {
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [ "${CI}" == "false" ]; then if [ "${CI}" == "false" ]; then
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG} docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG} docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
fi fi
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}"; do for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG} docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG}
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -723,6 +816,9 @@ pipeline {
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${SEMVER}
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
docker push ${MANIFESTIMAGE}:amd64-${META_TAG} docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG} docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG}
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG} docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -732,6 +828,9 @@ pipeline {
docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
docker push ${MANIFESTIMAGE}:arm32v7-${SEMVER}
docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
docker manifest push --purge ${MANIFESTIMAGE}:latest || : docker manifest push --purge ${MANIFESTIMAGE}:latest || :
docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:arm64v8-latest docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:arm64v8-latest
docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm32v7-latest --os linux --arch arm docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm32v7-latest --os linux --arch arm
@@ -744,24 +843,32 @@ pipeline {
docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} --os linux --arch arm docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} --os linux --arch arm
docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} --os linux --arch arm64 --variant v8 docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} --os linux --arch arm64 --variant v8
docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER} || :
docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} --os linux --arch arm
docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
docker manifest push --purge ${MANIFESTIMAGE}:latest docker manifest push --purge ${MANIFESTIMAGE}:latest
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG} docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
done done
''' '''
} }
sh '''#! /bin/bash sh '''#! /bin/bash
for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
docker rmi \ docker rmi \
${DELETEIMAGE}:amd64-${META_TAG} \ ${DELETEIMAGE}:amd64-${META_TAG} \
${DELETEIMAGE}:amd64-latest \ ${DELETEIMAGE}:amd64-latest \
${DELETEIMAGE}:amd64-${EXT_RELEASE_TAG} \ ${DELETEIMAGE}:amd64-${EXT_RELEASE_TAG} \
${DELETEIMAGE}:amd64-${SEMVER} \
${DELETEIMAGE}:arm32v7-${META_TAG} \ ${DELETEIMAGE}:arm32v7-${META_TAG} \
${DELETEIMAGE}:arm32v7-latest \ ${DELETEIMAGE}:arm32v7-latest \
${DELETEIMAGE}:arm32v7-${EXT_RELEASE_TAG} \ ${DELETEIMAGE}:arm32v7-${EXT_RELEASE_TAG} \
${DELETEIMAGE}:arm32v7-${SEMVER} \
${DELETEIMAGE}:arm64v8-${META_TAG} \ ${DELETEIMAGE}:arm64v8-${META_TAG} \
${DELETEIMAGE}:arm64v8-latest \ ${DELETEIMAGE}:arm64v8-latest \
${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} || : ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} \
${DELETEIMAGE}:arm64v8-${SEMVER} || :
done done
docker rmi \ docker rmi \
ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \ ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
@@ -773,7 +880,7 @@ pipeline {
// If this is a public release tag it in the LS Github // If this is a public release tag it in the LS Github
stage('Github-Tag-Push-Release') { stage('Github-Tag-Push-Release') {
when { when {
branch "master" branch "focal"
expression { expression {
env.LS_RELEASE != env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER env.LS_RELEASE != env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
} }
@@ -785,14 +892,14 @@ pipeline {
sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \ sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \
-d '{"tag":"'${META_TAG}'",\ -d '{"tag":"'${META_TAG}'",\
"object": "'${COMMIT_SHA}'",\ "object": "'${COMMIT_SHA}'",\
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to master",\ "message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to focal",\
"type": "commit",\ "type": "commit",\
"tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' ''' "tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
echo "Pushing New release for Tag" echo "Pushing New release for Tag"
sh '''#! /bin/bash sh '''#! /bin/bash
echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json
echo '{"tag_name":"'${META_TAG}'",\ echo '{"tag_name":"'${META_TAG}'",\
"target_commitish": "master",\ "target_commitish": "focal",\
"name": "'${META_TAG}'",\ "name": "'${META_TAG}'",\
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**Remote Changes:**\\n\\n' > start "body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**Remote Changes:**\\n\\n' > start
printf '","draft": false,"prerelease": false}' >> releasebody.json printf '","draft": false,"prerelease": false}' >> releasebody.json

View File

@@ -1,5 +1,5 @@
<!-- DO NOT EDIT THIS FILE MANUALLY --> <!-- DO NOT EDIT THIS FILE MANUALLY -->
<!-- Please read the https://github.com/linuxserver/docker-code-server/blob/master/.github/CONTRIBUTING.md --> <!-- Please read the https://github.com/linuxserver/docker-code-server/blob/focal/.github/CONTRIBUTING.md -->
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io) [![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io)
@@ -33,10 +33,10 @@ Find us at:
[![GitHub Release](https://img.shields.io/github/release/linuxserver/docker-code-server.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-code-server/releases) [![GitHub Release](https://img.shields.io/github/release/linuxserver/docker-code-server.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-code-server/releases)
[![GitHub Package Repository](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub%20Package&logo=github)](https://github.com/linuxserver/docker-code-server/packages) [![GitHub Package Repository](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub%20Package&logo=github)](https://github.com/linuxserver/docker-code-server/packages)
[![GitLab Container Registry](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitLab%20Registry&logo=gitlab)](https://gitlab.com/linuxserver.io/docker-code-server/container_registry) [![GitLab Container Registry](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitLab%20Registry&logo=gitlab)](https://gitlab.com/linuxserver.io/docker-code-server/container_registry)
[![MicroBadger Layers](https://img.shields.io/microbadger/layers/linuxserver/code-server.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge)](https://microbadger.com/images/linuxserver/code-server "Get your own version badge on microbadger.com") [![Quay.io](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Quay.io)](https://quay.io/repository/linuxserver.io/code-server)
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/code-server.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=pulls&logo=docker)](https://hub.docker.com/r/linuxserver/code-server) [![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/code-server.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=pulls&logo=docker)](https://hub.docker.com/r/linuxserver/code-server)
[![Docker Stars](https://img.shields.io/docker/stars/linuxserver/code-server.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=stars&logo=docker)](https://hub.docker.com/r/linuxserver/code-server) [![Docker Stars](https://img.shields.io/docker/stars/linuxserver/code-server.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=stars&logo=docker)](https://hub.docker.com/r/linuxserver/code-server)
[![Jenkins Build](https://img.shields.io/jenkins/build?labelColor=555555&logoColor=ffffff&style=for-the-badge&jobUrl=https%3A%2F%2Fci.linuxserver.io%2Fjob%2FDocker-Pipeline-Builders%2Fjob%2Fdocker-code-server%2Fjob%2Fmaster%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-code-server/job/master/) [![Jenkins Build](https://img.shields.io/jenkins/build?labelColor=555555&logoColor=ffffff&style=for-the-badge&jobUrl=https%3A%2F%2Fci.linuxserver.io%2Fjob%2FDocker-Pipeline-Builders%2Fjob%2Fdocker-code-server%2Fjob%2Ffocal%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-code-server/job/focal/)
[![LSIO CI](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=CI&query=CI&url=https%3A%2F%2Fci-tests.linuxserver.io%2Flinuxserver%2Fcode-server%2Flatest%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/code-server/latest/index.html) [![LSIO CI](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=CI&query=CI&url=https%3A%2F%2Fci-tests.linuxserver.io%2Flinuxserver%2Fcode-server%2Flatest%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/code-server/latest/index.html)
[Code-server](https://coder.com) is VS Code running on a remote server, accessible through the browser. [Code-server](https://coder.com) is VS Code running on a remote server, accessible through the browser.
@@ -53,7 +53,7 @@ Find us at:
Our images support multiple architectures such as `x86-64`, `arm64` and `armhf`. We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/). Our images support multiple architectures such as `x86-64`, `arm64` and `armhf`. We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/).
Simply pulling `ghcr.io/linuxserver/code-server` should retrieve the correct image for your arch, but you can also pull specific arch images via tags. Simply pulling `lscr.io/linuxserver/code-server` should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
The architectures supported by this image are: The architectures supported by this image are:
@@ -70,7 +70,7 @@ This image provides various versions that are available via tags. `latest` tag u
| Tag | Description | | Tag | Description |
| :----: | --- | | :----: | --- |
| latest | Stable releases | | latest | Stable releases |
| development | DEPRECATED (no longer updated) - Prereleases from their GitHub | | focal | Stable releases, on a focal baseiamge |
## Application Setup ## Application Setup
@@ -91,16 +91,14 @@ How to create the [hashed password](https://github.com/cdr/code-server/blob/mast
Here are some example snippets to help you get started creating a container. Here are some example snippets to help you get started creating a container.
### docker-compose ([recommended](https://docs.linuxserver.io/general/docker-compose)) ### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
Compatible with docker-compose v2 schemas.
```yaml ```yaml
--- ---
version: "2.1" version: "2.1"
services: services:
code-server: code-server:
image: ghcr.io/linuxserver/code-server image: lscr.io/linuxserver/code-server
container_name: code-server container_name: code-server
environment: environment:
- PUID=1000 - PUID=1000
@@ -118,7 +116,7 @@ services:
restart: unless-stopped restart: unless-stopped
``` ```
### docker cli ### docker cli ([click here for more info](https://docs.docker.com/engine/reference/commandline/cli/))
```bash ```bash
docker run -d \ docker run -d \
@@ -134,7 +132,7 @@ docker run -d \
-p 8443:8443 \ -p 8443:8443 \
-v /path/to/appdata/config:/config \ -v /path/to/appdata/config:/config \
--restart unless-stopped \ --restart unless-stopped \
ghcr.io/linuxserver/code-server lscr.io/linuxserver/code-server
``` ```
## Parameters ## Parameters
@@ -197,7 +195,7 @@ We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to
* container version number * container version number
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' code-server` * `docker inspect -f '{{ index .Config.Labels "build_version" }}' code-server`
* image version number * image version number
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' ghcr.io/linuxserver/code-server` * `docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/code-server`
## Updating Info ## Updating Info
@@ -215,7 +213,7 @@ Below are the instructions for updating containers:
### Via Docker Run ### Via Docker Run
* Update the image: `docker pull ghcr.io/linuxserver/code-server` * Update the image: `docker pull lscr.io/linuxserver/code-server`
* Stop the running container: `docker stop code-server` * Stop the running container: `docker stop code-server`
* Delete the container: `docker rm code-server` * Delete the container: `docker rm code-server`
* Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your `/config` folder and settings will be preserved) * Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your `/config` folder and settings will be preserved)
@@ -250,7 +248,7 @@ cd docker-code-server
docker build \ docker build \
--no-cache \ --no-cache \
--pull \ --pull \
-t ghcr.io/linuxserver/code-server:latest . -t lscr.io/linuxserver/code-server:latest .
``` ```
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static` The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
@@ -263,6 +261,8 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Versions ## Versions
* **12.07.21:** - Rebase to focal
* **11.07.21:** - Bump node to 14 to fix builds
* **08.05.21:** - Fix doc link * **08.05.21:** - Fix doc link
* **04.02.20:** - Allow setting gui password via hash using env var `HASHED_PASSWORD`. * **04.02.20:** - Allow setting gui password via hash using env var `HASHED_PASSWORD`.
* **23.12.20:** - Allow setting sudo password via hash using env var `SUDO_PASSWORD_HASH`. * **23.12.20:** - Allow setting sudo password via hash using env var `SUDO_PASSWORD_HASH`.

View File

@@ -6,7 +6,7 @@ external_type: na
custom_version_command: "curl -sX GET https://registry.yarnpkg.com/code-server | jq -r '.\"dist-tags\".latest' | sed 's|^|v|'" custom_version_command: "curl -sX GET https://registry.yarnpkg.com/code-server | jq -r '.\"dist-tags\".latest' | sed 's|^|v|'"
release_type: stable release_type: stable
release_tag: latest release_tag: latest
ls_branch: master ls_branch: focal
repo_vars: repo_vars:
- CONTAINER_NAME = 'code-server' - CONTAINER_NAME = 'code-server'
- BUILD_VERSION_ARG = 'CODE_RELEASE' - BUILD_VERSION_ARG = 'CODE_RELEASE'

View File

@@ -1,185 +1,190 @@
adduser3.116ubuntu1 adduser3.118ubuntu2
apt1.6.13 apt2.0.6
apt-utils1.6.13 apt-utils2.0.6
base-files10.1ubuntu2.10 base-files11ubuntu5.4
base-passwd3.5.44 base-passwd3.5.47
bash4.4.18-2ubuntu1.2 bash5.0-6ubuntu1.1
bsdutils1:2.31.1-0.4ubuntu3.7 bsdutils1:2.34-0.1ubuntu9.1
bzip21.0.6-8.1ubuntu0.2 bzip21.0.8-2
ca-certificates20210119~18.04.1 ca-certificates20210119~20.04.2
coreutils8.28-1ubuntu1 coreutils8.30-3ubuntu2
curl7.58.0-2ubuntu3.13 curl7.68.0-1ubuntu2.7
dash0.5.8-2.10 dash0.5.10.2-6
debconf1.5.66ubuntu1 debconf1.5.73
debianutils4.8.4 debianutils4.9.1
diffutils1:3.6-1 diffutils1:3.7-3
dirmngr2.2.4-1ubuntu1.4 dirmngr2.2.19-3ubuntu2.1
dpkg1.19.0.5ubuntu2.3 dpkg1.19.7ubuntu3
e2fsprogs1.44.1-1ubuntu1.3 e2fsprogs1.45.5-2ubuntu1
fdisk2.31.1-0.4ubuntu3.7 fdisk2.34-0.1ubuntu9.1
file1:5.32-2ubuntu0.4 file1:5.38-4
findutils4.6.0+git+20170828-2 findutils4.7.0-1ubuntu1
gcc-8-base8.4.0-1ubuntu1~18.04 gcc-10-base10.3.0-1ubuntu1~20.04
git1:2.17.1-1ubuntu0.8 git1:2.25.1-1ubuntu3.2
git-man1:2.17.1-1ubuntu0.8 git-man1:2.25.1-1ubuntu3.2
gnupg2.2.4-1ubuntu1.4 gnupg2.2.19-3ubuntu2.1
gnupg-l10n2.2.4-1ubuntu1.4 gnupg-l10n2.2.19-3ubuntu2.1
gnupg-utils2.2.4-1ubuntu1.4 gnupg-utils2.2.19-3ubuntu2.1
gpg2.2.4-1ubuntu1.4 gpg2.2.19-3ubuntu2.1
gpg-agent2.2.4-1ubuntu1.4 gpg-agent2.2.19-3ubuntu2.1
gpgconf2.2.4-1ubuntu1.4 gpgconf2.2.19-3ubuntu2.1
gpgsm2.2.4-1ubuntu1.4 gpgsm2.2.19-3ubuntu2.1
gpgv2.2.4-1ubuntu1.4 gpgv2.2.19-3ubuntu2.1
gpg-wks-client2.2.4-1ubuntu1.4 gpg-wks-client2.2.19-3ubuntu2.1
gpg-wks-server2.2.4-1ubuntu1.4 gpg-wks-server2.2.19-3ubuntu2.1
grep3.1-2build1 grep3.4-1
gzip1.6-5ubuntu1 gzip1.10-0ubuntu4
hostname3.20 hostname3.23
init-system-helpers1.51 init-system-helpers1.57
jq1.5+dfsg-2 jq1.6-1ubuntu0.20.04.1
krb5-locales1.16-2ubuntu0.2 krb5-locales1.17-6ubuntu4.1
less487-0.1 less551-1ubuntu0.1
libacl12.2.52-3build1 libacl12.2.53-6
libapt-inst2.01.6.13 libapt-pkg6.02.0.6
libapt-pkg5.01.6.13 libasn1-8-heimdal7.7.0+dfsg-1ubuntu1
libasn1-8-heimdal7.5.0+dfsg-1 libassuan02.5.3-7ubuntu2
libassuan02.5.1-2 libattr11:2.4.48-5
libattr11:2.4.47-2build1 libaudit11:2.8.5-2ubuntu6
libaudit11:2.8.2-1ubuntu1.1 libaudit-common1:2.8.5-2ubuntu6
libaudit-common1:2.8.2-1ubuntu1.1 libblkid12.34-0.1ubuntu9.1
libblkid12.31.1-0.4ubuntu3.7 libbrotli11.0.7-6ubuntu0.1
libbsd00.8.7-1ubuntu0.1 libbsd00.10.0-1
libbz2-1.01.0.6-8.1ubuntu0.2 libbz2-1.01.0.8-2
libc62.27-3ubuntu1.4 libc62.31-0ubuntu9.2
libcap-ng00.7.7-3.1 libcap-ng00.7.9-2.1build1
libc-bin2.27-3ubuntu1.4 libc-bin2.31-0ubuntu9.2
libcom-err21.44.1-1ubuntu1.3 libcbor0.60.6.0-0ubuntu1
libcurl3-gnutls7.58.0-2ubuntu3.13 libcom-err21.45.5-2ubuntu1
libcurl47.58.0-2ubuntu3.13 libcrypt11:4.4.10-10ubuntu4
libdb5.35.3.28-13.1ubuntu1.1 libcurl3-gnutls7.68.0-1ubuntu2.7
libdebconfclient00.213ubuntu1 libcurl47.68.0-1ubuntu2.7
libedit23.1-20170329-1 libdb5.35.3.28+dfsg1-0.6ubuntu2
liberror-perl0.17025-1 libdebconfclient00.251ubuntu1
libexpat12.2.5-3ubuntu0.2 libedit23.1-20191231-1
libext2fs21.44.1-1ubuntu1.3 liberror-perl0.17029-1
libfdisk12.31.1-0.4ubuntu3.7 libexpat12.2.9-1build1
libffi63.2.1-8 libext2fs21.45.5-2ubuntu1
libgcc11:8.4.0-1ubuntu1~18.04 libfdisk12.34-0.1ubuntu9.1
libgcrypt201.8.1-4ubuntu1.2 libffi73.3-4
libgdbm51.14.1-6 libfido2-11.3.1-1ubuntu2
libgdbm-compat41.14.1-6 libgcc-s110.3.0-1ubuntu1~20.04
libgmp102:6.1.2+dfsg-2 libgcrypt201.8.5-5ubuntu1.1
libgnutls303.5.18-1ubuntu1.4 libgdbm61.18.1-5
libgpg-error01.27-6 libgdbm-compat41.18.1-5
libgssapi3-heimdal7.5.0+dfsg-1 libgmp102:6.2.0+dfsg-4
libgssapi-krb5-21.16-2ubuntu0.2 libgnutls303.6.13-2ubuntu1.6
libhcrypto4-heimdal7.5.0+dfsg-1 libgpg-error01.37-1
libheimbase1-heimdal7.5.0+dfsg-1 libgssapi3-heimdal7.7.0+dfsg-1ubuntu1
libheimntlm0-heimdal7.5.0+dfsg-1 libgssapi-krb5-21.17-6ubuntu4.1
libhogweed43.4-1ubuntu0.1 libhcrypto4-heimdal7.7.0+dfsg-1ubuntu1
libhx509-5-heimdal7.5.0+dfsg-1 libheimbase1-heimdal7.7.0+dfsg-1ubuntu1
libidn2-02.0.4-1.1ubuntu0.2 libheimntlm0-heimdal7.7.0+dfsg-1ubuntu1
libjq11.5+dfsg-2 libhogweed53.5.1+really3.5.1-2ubuntu0.2
libk5crypto31.16-2ubuntu0.2 libhx509-5-heimdal7.7.0+dfsg-1ubuntu1
libkeyutils11.5.9-9.2ubuntu2 libidn2-02.2.0-2
libkrb5-26-heimdal7.5.0+dfsg-1 libjq11.6-1ubuntu0.20.04.1
libkrb5-31.16-2ubuntu0.2 libk5crypto31.17-6ubuntu4.1
libkrb5support01.16-2ubuntu0.2 libkeyutils11.6-6ubuntu1
libkrb5-26-heimdal7.7.0+dfsg-1ubuntu1
libkrb5-31.17-6ubuntu4.1
libkrb5support01.17-6ubuntu4.1
libksba81.3.5-2 libksba81.3.5-2
libldap-2.4-22.4.45+dfsg-1ubuntu1.10 libldap-2.4-22.4.49+dfsg-2ubuntu1.8
libldap-common2.4.45+dfsg-1ubuntu1.10 libldap-common2.4.49+dfsg-2ubuntu1.8
liblz4-10.0~r131-2ubuntu3 liblz4-11.9.2-2ubuntu0.20.04.1
liblzma55.2.2-1.3 liblzma55.2.4-1ubuntu1
libmagic11:5.32-2ubuntu0.4 libmagic11:5.38-4
libmagic-mgc1:5.32-2ubuntu0.4 libmagic-mgc1:5.38-4
libmount12.31.1-0.4ubuntu3.7 libmount12.34-0.1ubuntu9.1
libncurses56.1-1ubuntu1.18.04 libmpdec22.4.2-3
libncursesw56.1-1ubuntu1.18.04 libncurses66.2-0ubuntu2
libnettle63.4-1ubuntu0.1 libncursesw66.2-0ubuntu2
libnghttp2-141.30.0-1ubuntu1 libnettle73.5.1+really3.5.1-2ubuntu0.2
libnpth01.5-3 libnghttp2-141.40.0-1build1
libonig46.7.0-1 libnpth01.6-1
libp11-kit00.23.9-2ubuntu0.1 libonig56.9.4-1
libpam0g1.1.8-3.6ubuntu2.18.04.2 libp11-kit00.23.20-1ubuntu0.1
libpam-modules1.1.8-3.6ubuntu2.18.04.2 libpam0g1.3.1-5ubuntu4.2
libpam-modules-bin1.1.8-3.6ubuntu2.18.04.2 libpam-modules1.3.1-5ubuntu4.2
libpam-runtime1.1.8-3.6ubuntu2.18.04.2 libpam-modules-bin1.3.1-5ubuntu4.2
libpcre32:8.39-9 libpam-runtime1.3.1-5ubuntu4.2
libperl5.265.26.1-6ubuntu0.5 libpcre2-8-010.34-7
libprocps62:3.3.12-3ubuntu1.2 libpcre32:8.39-12build1
libpsl50.19.1-5build1 libperl5.305.30.0-9ubuntu0.2
libpython2.7-minimal2.7.17-1~18.04ubuntu1.6 libprocps82:3.3.16-1ubuntu2.3
libpython2.7-stdlib2.7.17-1~18.04ubuntu1.6 libpsl50.21.0-1ubuntu1
libpython-stdlib2.7.15~rc1-1 libpython3.8-minimal3.8.10-0ubuntu1~20.04.1
libreadline77.0-3 libpython3.8-stdlib3.8.10-0ubuntu1~20.04.1
libroken18-heimdal7.5.0+dfsg-1 libpython3-stdlib3.8.2-0ubuntu2
librtmp12.4+20151223.gitfa8646d.1-1 libreadline88.0-4
libsasl2-22.1.27~101-g0780600+dfsg-3ubuntu2.3 libroken18-heimdal7.7.0+dfsg-1ubuntu1
libsasl2-modules2.1.27~101-g0780600+dfsg-3ubuntu2.3 librtmp12.4+20151223.gitfa8646d.1-2build1
libsasl2-modules-db2.1.27~101-g0780600+dfsg-3ubuntu2.3 libsasl2-22.1.27+dfsg-2
libseccomp22.5.1-1ubuntu1~18.04.1 libsasl2-modules2.1.27+dfsg-2
libselinux12.7-2build2 libsasl2-modules-db2.1.27+dfsg-2
libsemanage12.7-2build2 libseccomp22.5.1-1ubuntu1~20.04.1
libsemanage-common2.7-2build2 libselinux13.0-1build2
libsepol12.7-1 libsemanage13.0-1build2
libsmartcols12.31.1-0.4ubuntu3.7 libsemanage-common3.0-1build2
libsqlite3-03.22.0-1ubuntu0.4 libsepol13.0-1
libss21.44.1-1ubuntu1.3 libsmartcols12.34-0.1ubuntu9.1
libssl1.0.01.0.2n-1ubuntu5.6 libsqlite3-03.31.1-4ubuntu0.2
libssl1.11.1.1-1ubuntu2.1~18.04.9 libss21.45.5-2ubuntu1
libstdc++68.4.0-1ubuntu1~18.04 libssh-40.9.3-2ubuntu2.2
libsystemd0237-3ubuntu10.46 libssl1.11.1.1f-1ubuntu2.8
libtasn1-64.13-2 libstdc++610.3.0-1ubuntu1~20.04
libtinfo56.1-1ubuntu1.18.04 libsystemd0245.4-4ubuntu3.13
libudev1237-3ubuntu10.46 libtasn1-64.16.0-2
libunistring20.9.9-0ubuntu2 libtinfo66.2-0ubuntu2
libuuid12.31.1-0.4ubuntu3.7 libudev1245.4-4ubuntu3.13
libwind0-heimdal7.5.0+dfsg-1 libunistring20.9.10-2
libx11-62:1.6.4-3ubuntu0.3 libuuid12.34-0.1ubuntu9.1
libx11-data2:1.6.4-3ubuntu0.3 libwind0-heimdal7.7.0+dfsg-1ubuntu1
libxau61:1.0.8-1ubuntu1 libx11-62:1.6.9-2ubuntu1.2
libxcb11.13-2~ubuntu18.04 libx11-data2:1.6.9-2ubuntu1.2
libxdmcp61:1.1.2-3 libxau61:1.0.9-0ubuntu1
libxext62:1.3.3-1 libxcb11.14-2
libxmuu12:1.1.2-2 libxdmcp61:1.1.3-0ubuntu1
libzstd11.3.3+dfsg-2ubuntu1.2 libxext62:1.3.4-0ubuntu1
locales2.27-3ubuntu1.4 libxmuu12:1.1.3-0ubuntu1
login1:4.5-1ubuntu2 libzstd11.4.4+dfsg-3ubuntu0.1
lsb-base9.20170808ubuntu1 locales2.31-0ubuntu9.2
mawk1.3.3-17ubuntu3 login1:4.8.1-1ubuntu5.20.04.1
mime-support3.60ubuntu1 logsave1.45.5-2ubuntu1
mount2.31.1-0.4ubuntu3.7 lsb-base11.1.0ubuntu2
multiarch-support2.27-3ubuntu1.4 mawk1.3.4.20200120-2
nano2.9.3-2 mime-support3.64ubuntu1
ncurses-base6.1-1ubuntu1.18.04 mount2.34-0.1ubuntu9.1
ncurses-bin6.1-1ubuntu1.18.04 nano4.8-1ubuntu1
netbase5.4 ncurses-base6.2-0ubuntu2
net-tools1.60+git20161116.90da8a0-1ubuntu1 ncurses-bin6.2-0ubuntu2
nodejs12.22.1-1nodesource1 netbase6.1
openssh-client1:7.6p1-4ubuntu0.3 net-tools1.60+git20180626.aebd88e-1ubuntu1
openssl1.1.1-1ubuntu2.1~18.04.9 nodejs14.18.1-deb-1nodesource1
passwd1:4.5-1ubuntu2 openssh-client1:8.2p1-4ubuntu0.3
patch2.7.6-2ubuntu1.1 openssl1.1.1f-1ubuntu2.8
perl5.26.1-6ubuntu0.5 passwd1:4.8.1-1ubuntu5.20.04.1
perl-base5.26.1-6ubuntu0.5 patch2.7.6-6
perl-modules-5.265.26.1-6ubuntu0.5 perl5.30.0-9ubuntu0.2
pinentry-curses1.1.0-1 perl-base5.30.0-9ubuntu0.2
procps2:3.3.12-3ubuntu1.2 perl-modules-5.305.30.0-9ubuntu0.2
publicsuffix20180223.1310-1 pinentry-curses1.1.0-3build1
python2.7.15~rc1-1 procps2:3.3.16-1ubuntu2.3
python2.72.7.17-1~18.04ubuntu1.6 publicsuffix20200303.0012-1
python2.7-minimal2.7.17-1~18.04ubuntu1.6 python33.8.2-0ubuntu2
python-minimal2.7.15~rc1-1 python3.83.8.10-0ubuntu1~20.04.1
readline-common7.0-3 python3.8-minimal3.8.10-0ubuntu1~20.04.1
sed4.4-2 python3-minimal3.8.2-0ubuntu2
sensible-utils0.0.12 readline-common8.0-4
sudo1.8.21p2-3ubuntu1.4 sed4.7-1
sysvinit-utils2.88dsf-59.10ubuntu1 sensible-utils0.0.12+nmu1
tar1.29b-2ubuntu0.2 sudo1.8.31-1ubuntu1.2
tzdata2021a-0ubuntu0.18.04 sysvinit-utils2.96-2.1ubuntu1
ubuntu-keyring2018.09.18.1~18.04.2 tar1.30+dfsg-7ubuntu0.20.04.1
util-linux2.31.1-0.4ubuntu3.7 tzdata2021a-2ubuntu0.20.04
xauth1:1.0.10-1 ubuntu-keyring2020.02.11.4
xz-utils5.2.2-1.3 util-linux2.34-0.1ubuntu9.1
yarn1.22.5-1 xauth1:1.1-0ubuntu1
zlib1g1:1.2.11.dfsg-0ubuntu2 xz-utils5.2.4-1ubuntu1
yarn1.22.15-1
zlib1g1:1.2.11.dfsg-2ubuntu1.2

View File

@@ -29,7 +29,7 @@ available_architectures:
development_versions: true development_versions: true
development_versions_items: development_versions_items:
- { tag: "latest", desc: "Stable releases" } - { tag: "latest", desc: "Stable releases" }
- { tag: "development", desc: "DEPRECATED (no longer updated) - Prereleases from their GitHub" } - { tag: "focal", desc: "Stable releases, on a focal baseiamge" }
# container parameters # container parameters
common_param_env_vars_enabled: true common_param_env_vars_enabled: true
@@ -75,6 +75,8 @@ app_setup_block: |
# changelog # changelog
changelogs: changelogs:
- { date: "12.07.21:", desc: "Rebase to focal" }
- { date: "11.07.21:", desc: "Bump node to 14 to fix builds" }
- { date: "08.05.21:", desc: "Fix doc link" } - { date: "08.05.21:", desc: "Fix doc link" }
- { date: "04.02.20:", desc: "Allow setting gui password via hash using env var `HASHED_PASSWORD`." } - { date: "04.02.20:", desc: "Allow setting gui password via hash using env var `HASHED_PASSWORD`." }
- { date: "23.12.20:", desc: "Allow setting sudo password via hash using env var `SUDO_PASSWORD_HASH`." } - { date: "23.12.20:", desc: "Allow setting sudo password via hash using env var `SUDO_PASSWORD_HASH`." }