Compare commits

..

4 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
16 changed files with 253 additions and 277 deletions

View File

@ -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

@ -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 -u ${{ secrets.CR_USER }}:${{ secrets.CR_PAT }} -sX GET https://api.github.com/repos/coder/code-server/releases/latest | jq -r '.tag_name' | 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

@ -12,49 +12,56 @@ ENV HOME="/config"
RUN \ RUN \
echo "**** install node repo ****" && \ echo "**** install node repo ****" && \
apt-get update && \
apt-get install -y \
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_14.x focal 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 - && \
echo 'deb https://dl.yarnpkg.com/debian/ stable main' \
> /etc/apt/sources.list.d/yarn.list && \
echo "**** install build dependencies ****" && \ echo "**** install build dependencies ****" && \
apt-get update && \ apt-get update && \
apt-get install -y \ apt-get install -y \
build-essential \ build-essential \
nodejs && \ libsecret-1-dev \
libx11-dev \
libxkbfile-dev \
pkg-config \
python3 && \
echo "**** install runtime dependencies ****" && \ echo "**** install runtime dependencies ****" && \
apt-get install -y \ apt-get install -y \
git \ git \
jq \ jq \
libatomic1 \
nano \ nano \
net-tools \ net-tools \
sudo && \ nodejs \
sudo \
yarn && \
echo "**** install code-server ****" && \ echo "**** install code-server ****" && \
if [ -z ${CODE_RELEASE+x} ]; then \ if [ -z ${CODE_RELEASE+x} ]; then \
CODE_RELEASE=$(curl -sX GET https://api.github.com/repos/coder/code-server/releases/latest \ CODE_RELEASE=$(curl -sX GET https://registry.yarnpkg.com/code-server \
| awk '/tag_name/{print $4;exit}' FS='[""]' | sed 's|^v||'); \ | jq -r '."dist-tags".latest' | sed 's|^|v|'); \
fi && \
mkdir -p /app/code-server && \
curl -o \
/tmp/code-server.tar.gz -L \
"https://github.com/coder/code-server/releases/download/v${CODE_RELEASE}/code-server-${CODE_RELEASE}-linux-amd64.tar.gz" && \
tar xf /tmp/code-server.tar.gz -C \
/app/code-server --strip-components=1 && \
echo "**** patch 4.0.2 ****" && \
if [ "${CODE_RELEASE}" = "4.0.2" ] && [ "$(uname -m)" != "x86_64" ]; then \
cd /app/code-server && \
npm i --production @node-rs/argon2; \
fi && \ fi && \
CODE_VERSION=$(echo "$CODE_RELEASE" | awk '{print substr($1,2); }') && \
npm config set python python3 \
yarn config set network-timeout 600000 -g && \
yarn --production --verbose --frozen-lockfile global add code-server@"$CODE_VERSION" && \
yarn cache clean && \
echo "**** clean up ****" && \ echo "**** clean up ****" && \
apt-get purge --auto-remove -y \ apt-get purge --auto-remove -y \
build-essential \ build-essential \
nodejs && \ libx11-dev \
libxkbfile-dev \
libsecret-1-dev \
pkg-config && \
apt-get clean && \ apt-get clean && \
rm -rf \ rm -rf \
/config/* \ /config/* \
/tmp/* \ /tmp/* \
/var/lib/apt/lists/* \ /var/lib/apt/lists/* \
/var/tmp/* \ /var/tmp/*
/etc/apt/sources.list.d/nodesource.list
# add local files # add local files
COPY /root / COPY /root /

View File

@ -12,49 +12,56 @@ ENV HOME="/config"
RUN \ RUN \
echo "**** install node repo ****" && \ echo "**** install node repo ****" && \
apt-get update && \
apt-get install -y \
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_14.x focal 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 - && \
echo 'deb https://dl.yarnpkg.com/debian/ stable main' \
> /etc/apt/sources.list.d/yarn.list && \
echo "**** install build dependencies ****" && \ echo "**** install build dependencies ****" && \
apt-get update && \ apt-get update && \
apt-get install -y \ apt-get install -y \
build-essential \ build-essential \
nodejs && \ libsecret-1-dev \
libx11-dev \
libxkbfile-dev \
pkg-config \
python3 && \
echo "**** install runtime dependencies ****" && \ echo "**** install runtime dependencies ****" && \
apt-get install -y \ apt-get install -y \
git \ git \
jq \ jq \
libatomic1 \
nano \ nano \
net-tools \ net-tools \
sudo && \ nodejs \
sudo \
yarn && \
echo "**** install code-server ****" && \ echo "**** install code-server ****" && \
if [ -z ${CODE_RELEASE+x} ]; then \ if [ -z ${CODE_RELEASE+x} ]; then \
CODE_RELEASE=$(curl -sX GET https://api.github.com/repos/coder/code-server/releases/latest \ CODE_RELEASE=$(curl -sX GET https://registry.yarnpkg.com/code-server \
| awk '/tag_name/{print $4;exit}' FS='[""]' | sed 's|^v||'); \ | jq -r '."dist-tags".latest' | sed 's|^|v|'); \
fi && \
mkdir -p /app/code-server && \
curl -o \
/tmp/code-server.tar.gz -L \
"https://github.com/coder/code-server/releases/download/v${CODE_RELEASE}/code-server-${CODE_RELEASE}-linux-arm64.tar.gz" && \
tar xf /tmp/code-server.tar.gz -C \
/app/code-server --strip-components=1 && \
echo "**** patch 4.0.2 ****" && \
if [ "${CODE_RELEASE}" = "4.0.2" ] && [ "$(uname -m)" != "x86_64" ]; then \
cd /app/code-server && \
npm i --production @node-rs/argon2; \
fi && \ fi && \
CODE_VERSION=$(echo "$CODE_RELEASE" | awk '{print substr($1,2); }') && \
npm config set python python3 \
yarn config set network-timeout 600000 -g && \
yarn --production --verbose --frozen-lockfile global add code-server@"$CODE_VERSION" && \
yarn cache clean && \
echo "**** clean up ****" && \ echo "**** clean up ****" && \
apt-get purge --auto-remove -y \ apt-get purge --auto-remove -y \
build-essential \ build-essential \
nodejs && \ libx11-dev \
libxkbfile-dev \
libsecret-1-dev \
pkg-config && \
apt-get clean && \ apt-get clean && \
rm -rf \ rm -rf \
/config/* \ /config/* \
/tmp/* \ /tmp/* \
/var/lib/apt/lists/* \ /var/lib/apt/lists/* \
/var/tmp/* \ /var/tmp/*
/etc/apt/sources.list.d/nodesource.list
# add local files # add local files
COPY /root / COPY /root /

View File

@ -12,49 +12,56 @@ ENV HOME="/config"
RUN \ RUN \
echo "**** install node repo ****" && \ echo "**** install node repo ****" && \
apt-get update && \
apt-get install -y \
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_14.x focal 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 - && \
echo 'deb https://dl.yarnpkg.com/debian/ stable main' \
> /etc/apt/sources.list.d/yarn.list && \
echo "**** install build dependencies ****" && \ echo "**** install build dependencies ****" && \
apt-get update && \ apt-get update && \
apt-get install -y \ apt-get install -y \
build-essential \ build-essential \
nodejs && \ libsecret-1-dev \
libx11-dev \
libxkbfile-dev \
pkg-config \
python3 && \
echo "**** install runtime dependencies ****" && \ echo "**** install runtime dependencies ****" && \
apt-get install -y \ apt-get install -y \
git \ git \
jq \ jq \
libatomic1 \
nano \ nano \
net-tools \ net-tools \
sudo && \ nodejs \
sudo \
yarn && \
echo "**** install code-server ****" && \ echo "**** install code-server ****" && \
if [ -z ${CODE_RELEASE+x} ]; then \ if [ -z ${CODE_RELEASE+x} ]; then \
CODE_RELEASE=$(curl -sX GET https://api.github.com/repos/coder/code-server/releases/latest \ CODE_RELEASE=$(curl -sX GET https://registry.yarnpkg.com/code-server \
| awk '/tag_name/{print $4;exit}' FS='[""]' | sed 's|^v||'); \ | jq -r '."dist-tags".latest' | sed 's|^|v|'); \
fi && \
mkdir -p /app/code-server && \
curl -o \
/tmp/code-server.tar.gz -L \
"https://github.com/coder/code-server/releases/download/v${CODE_RELEASE}/code-server-${CODE_RELEASE}-linux-armv7l.tar.gz" && \
tar xf /tmp/code-server.tar.gz -C \
/app/code-server --strip-components=1 && \
echo "**** patch 4.0.2 ****" && \
if [ "${CODE_RELEASE}" = "4.0.2" ] && [ "$(uname -m)" != "x86_64" ]; then \
cd /app/code-server && \
npm i --production @node-rs/argon2; \
fi && \ fi && \
CODE_VERSION=$(echo "$CODE_RELEASE" | awk '{print substr($1,2); }') && \
npm config set python python3 \
yarn config set network-timeout 600000 -g && \
yarn --production --verbose --frozen-lockfile global add code-server@"$CODE_VERSION" && \
yarn cache clean && \
echo "**** clean up ****" && \ echo "**** clean up ****" && \
apt-get purge --auto-remove -y \ apt-get purge --auto-remove -y \
build-essential \ build-essential \
nodejs && \ libx11-dev \
libxkbfile-dev \
libsecret-1-dev \
pkg-config && \
apt-get clean && \ apt-get clean && \
rm -rf \ rm -rf \
/config/* \ /config/* \
/tmp/* \ /tmp/* \
/var/lib/apt/lists/* \ /var/lib/apt/lists/* \
/var/tmp/* \ /var/tmp/*
/etc/apt/sources.list.d/nodesource.list
# add local files # add local files
COPY /root / COPY /root /

132
Jenkinsfile vendored
View File

@ -104,7 +104,7 @@ pipeline {
steps{ steps{
script{ script{
env.EXT_RELEASE = sh( env.EXT_RELEASE = sh(
script: ''' curl -sX GET https://api.github.com/repos/coder/code-server/releases/latest | jq -r '.tag_name' | sed 's|^v||' ''', script: ''' curl -sX GET https://registry.yarnpkg.com/code-server | jq -r '."dist-tags".latest' | sed 's|^|v|' ''',
returnStdout: true).trim() returnStdout: true).trim()
env.RELEASE_LINK = 'custom_command' env.RELEASE_LINK = 'custom_command'
} }
@ -118,11 +118,12 @@ pipeline {
script: '''echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''', script: '''echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''',
returnStdout: true).trim() returnStdout: true).trim()
def semver = env.EXT_RELEASE_CLEAN =~ /(\d+)\.(\d+)\.(\d+)/ env.SEMVER = (new Date()).format('YYYY.MM.dd')
def semver = env.EXT_RELEASE_CLEAN =~ /(\d+)\.(\d+)\.(\d+)$/
if (semver.find()) { if (semver.find()) {
env.SEMVER = "${semver[0][1]}.${semver[0][2]}.${semver[0][3]}" env.SEMVER = "${semver[0][1]}.${semver[0][2]}.${semver[0][3]}"
} else { } else {
semver = env.EXT_RELEASE_CLEAN =~ /(\d+)\.(\d+)(?:\.(\d+))?(.*)/ semver = env.EXT_RELEASE_CLEAN =~ /(\d+)\.(\d+)(?:\.(\d+))?(.*)$/
if (semver.find()) { if (semver.find()) {
if (semver[0][3]) { if (semver[0][3]) {
env.SEMVER = "${semver[0][1]}.${semver[0][2]}.${semver[0][3]}" env.SEMVER = "${semver[0][1]}.${semver[0][2]}.${semver[0][3]}"
@ -132,22 +133,14 @@ pipeline {
} }
} }
if (env.SEMVER != null) { println("SEMVER: ${env.SEMVER}")
if (BRANCH_NAME != "master" && BRANCH_NAME != "main") {
env.SEMVER = "${env.SEMVER}-${BRANCH_NAME}"
}
println("SEMVER: ${env.SEMVER}")
} else {
println("No SEMVER detected")
}
} }
} }
} }
// 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 {
@ -170,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 {
@ -247,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
@ -258,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'
@ -287,7 +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
for i in ${TEMPLATES_TO_DELETE}; do for i in ${TEMPLATES_TO_DELETE}; do
git rm "${i}" git rm "${i}"
done done
@ -308,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
@ -343,11 +336,9 @@ pipeline {
if [[ ("${BRANCH_NAME}" == "master") || ("${BRANCH_NAME}" == "main") ]] && [[ (! -f ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml) || ("$(md5sum ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml | awk '{ print $1 }')") ]]; then if [[ ("${BRANCH_NAME}" == "master") || ("${BRANCH_NAME}" == "main") ]] && [[ (! -f ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml) || ("$(md5sum ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml | awk '{ print $1 }')") ]]; then
cd ${TEMPDIR}/unraid/templates/ cd ${TEMPDIR}/unraid/templates/
if grep -wq "${CONTAINER_NAME}" ${TEMPDIR}/unraid/templates/unraid/ignore.list; then if grep -wq "${CONTAINER_NAME}" ${TEMPDIR}/unraid/templates/unraid/ignore.list; then
echo "Image is on the ignore list, marking Unraid template as deprecated" echo "Image is on the ignore list, removing Unraid template"
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/ git rm unraid/${CONTAINER_NAME}.xml || :
git add -u unraid/${CONTAINER_NAME}.xml git commit -m 'Bot Removing Deprecated Unraid Template' || :
git mv unraid/${CONTAINER_NAME}.xml unraid/deprecated/${CONTAINER_NAME}.xml || :
git commit -m 'Bot Moving Deprecated Unraid Template' || :
else else
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/ cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/
git add unraid/${CONTAINER_NAME}.xml git add unraid/${CONTAINER_NAME}.xml
@ -366,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 {
@ -405,16 +396,16 @@ pipeline {
// Add package to Scarf.sh and set permissions // Add package to Scarf.sh and set permissions
stage("Scarf.sh package registry"){ stage("Scarf.sh package registry"){
when { when {
branch "master" branch "focal"
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
steps{ steps{
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
PACKAGE_UUID=$(curl -X GET -H "Authorization: Bearer ${SCARF_TOKEN}" https://scarf.sh/api/v1/organizations/linuxserver-ci/packages | jq -r '.[] | select(.name=="linuxserver/code-server") | .uuid') 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 if [ -z "${PACKAGE_UUID}" ]; then
echo "Adding package to Scarf.sh" echo "Adding package to Scarf.sh"
curl -sX POST https://scarf.sh/api/v1/organizations/linuxserver-ci/packages \ PACKAGE_UUID=$(curl -sX POST https://scarf.sh/api/v1/packages \
-H "Authorization: Bearer ${SCARF_TOKEN}" \ -H "Authorization: Bearer ${SCARF_TOKEN}" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d '{"name":"linuxserver/code-server",\ -d '{"name":"linuxserver/code-server",\
@ -422,10 +413,22 @@ pipeline {
"libraryType":"docker",\ "libraryType":"docker",\
"website":"https://github.com/linuxserver/docker-code-server",\ "website":"https://github.com/linuxserver/docker-code-server",\
"backendUrl":"https://ghcr.io/linuxserver/code-server",\ "backendUrl":"https://ghcr.io/linuxserver/code-server",\
"publicUrl":"https://lscr.io/linuxserver/code-server"}' || : "publicUrl":"https://lscr.io/linuxserver/code-server"}' \
| jq -r .uuid)
else else
echo "Package already exists on Scarf.sh" echo "Package already exists on Scarf.sh"
fi 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"}]'
''' '''
} }
} }
@ -562,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: ''
} }
@ -599,7 +602,7 @@ pipeline {
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
@ -623,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: ''
@ -644,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: ''
@ -749,15 +752,11 @@ pipeline {
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}
if [ -n "${SEMVER}" ]; then docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
fi
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}
if [ -n "${SEMVER}" ]; then docker push ${PUSHIMAGE}:${SEMVER}
docker push ${PUSHIMAGE}:${SEMVER}
fi
done done
''' '''
} }
@ -766,10 +765,8 @@ pipeline {
docker rmi \ docker rmi \
${DELETEIMAGE}:${META_TAG} \ ${DELETEIMAGE}:${META_TAG} \
${DELETEIMAGE}:${EXT_RELEASE_TAG} \ ${DELETEIMAGE}:${EXT_RELEASE_TAG} \
${DELETEIMAGE}:latest || : ${DELETEIMAGE}:latest \
if [ -n "${SEMVER}" ]; then ${DELETEIMAGE}:${SEMVER} || :
docker rmi ${DELETEIMAGE}:${SEMVER} || :
fi
done done
''' '''
} }
@ -819,11 +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}
if [ -n "${SEMVER}" ]; then docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER} docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${SEMVER}
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${SEMVER} docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
fi
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}
@ -833,11 +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}
if [ -n "${SEMVER}" ]; then docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
docker push ${MANIFESTIMAGE}:amd64-${SEMVER} docker push ${MANIFESTIMAGE}:arm32v7-${SEMVER}
docker push ${MANIFESTIMAGE}:arm32v7-${SEMVER} docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
fi
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
@ -850,18 +843,14 @@ 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
if [ -n "${SEMVER}" ]; then docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER} || :
docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER} || : docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${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}:arm32v7-${SEMVER} --os linux --arch arm docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
fi
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}
if [ -n "${SEMVER}" ]; then docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
fi
done done
''' '''
} }
@ -871,18 +860,15 @@ pipeline {
${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} \
if [ -n "${SEMVER}" ]; then ${DELETEIMAGE}:arm64v8-${SEMVER} || :
docker rmi \
${DELETEIMAGE}:amd64-${SEMVER} \
${DELETEIMAGE}:arm32v7-${SEMVER} \
${DELETEIMAGE}:arm64v8-${SEMVER} || :
fi
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} \
@ -894,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
} }
@ -906,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)
@ -29,7 +29,6 @@ Find us at:
# [linuxserver/code-server](https://github.com/linuxserver/docker-code-server) # [linuxserver/code-server](https://github.com/linuxserver/docker-code-server)
[![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fcode-server?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh/gateway/linuxserver-ci/docker/linuxserver%2Fcode-server)
[![GitHub Stars](https://img.shields.io/github/stars/linuxserver/docker-code-server.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-code-server) [![GitHub Stars](https://img.shields.io/github/stars/linuxserver/docker-code-server.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-code-server)
[![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)
@ -37,7 +36,7 @@ Find us at:
[![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) [![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.
@ -52,27 +51,26 @@ Find us at:
## Supported Architectures ## Supported Architectures
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 `lscr.io/linuxserver/code-server:latest` 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:
| Architecture | Available | Tag | | Architecture | Tag |
| :----: | :----: | ---- | | :----: | --- |
| x86-64 | ✅ | amd64-\<version tag\> | | x86-64 | amd64-latest |
| arm64 | ✅ | arm64v8-\<version tag\> | | arm64 | arm64v8-latest |
| armhf| ✅ | arm32v7-\<version tag\> | | armhf | arm32v7-latest |
## Version Tags ## Version Tags
This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags. This image provides various versions that are available via tags. `latest` tag usually provides the latest stable version. Others are considered under development and caution must be exercised when using them.
| Tag | Available | Description | | Tag | Description |
| :----: | :----: |--- | | :----: | --- |
| latest | ✅ | Stable releases | | latest | Stable releases |
| focal | ✅ | DEPRECATED (no longer updated, `latest` is rebased on focal) - Stable releases, based on Ubuntu Focal | | focal | Stable releases, on a focal baseiamge |
| development | ✅ | DEPRECATED (no longer updated) - Prereleases from their GitHub |
## Application Setup ## Application Setup
@ -100,7 +98,7 @@ Here are some example snippets to help you get started creating a container.
version: "2.1" version: "2.1"
services: services:
code-server: code-server:
image: lscr.io/linuxserver/code-server:latest image: lscr.io/linuxserver/code-server
container_name: code-server container_name: code-server
environment: environment:
- PUID=1000 - PUID=1000
@ -111,7 +109,6 @@ services:
- SUDO_PASSWORD=password #optional - SUDO_PASSWORD=password #optional
- SUDO_PASSWORD_HASH= #optional - SUDO_PASSWORD_HASH= #optional
- PROXY_DOMAIN=code-server.my.domain #optional - PROXY_DOMAIN=code-server.my.domain #optional
- DEFAULT_WORKSPACE=/config/workspace #optional
volumes: volumes:
- /path/to/appdata/config:/config - /path/to/appdata/config:/config
ports: ports:
@ -132,11 +129,10 @@ docker run -d \
-e SUDO_PASSWORD=password `#optional` \ -e SUDO_PASSWORD=password `#optional` \
-e SUDO_PASSWORD_HASH= `#optional` \ -e SUDO_PASSWORD_HASH= `#optional` \
-e PROXY_DOMAIN=code-server.my.domain `#optional` \ -e PROXY_DOMAIN=code-server.my.domain `#optional` \
-e DEFAULT_WORKSPACE=/config/workspace `#optional` \
-p 8443:8443 \ -p 8443:8443 \
-v /path/to/appdata/config:/config \ -v /path/to/appdata/config:/config \
--restart unless-stopped \ --restart unless-stopped \
lscr.io/linuxserver/code-server:latest lscr.io/linuxserver/code-server
``` ```
## Parameters ## Parameters
@ -154,7 +150,6 @@ Container images are configured using parameters passed at runtime (such as thos
| `-e SUDO_PASSWORD=password` | If this optional variable is set, user will have sudo access in the code-server terminal with the specified password. | | `-e SUDO_PASSWORD=password` | If this optional variable is set, user will have sudo access in the code-server terminal with the specified password. |
| `-e SUDO_PASSWORD_HASH=` | Optionally set sudo password via hash (takes priority over `SUDO_PASSWORD` var). Format is `$type$salt$hashed`. | | `-e SUDO_PASSWORD_HASH=` | Optionally set sudo password via hash (takes priority over `SUDO_PASSWORD` var). Format is `$type$salt$hashed`. |
| `-e PROXY_DOMAIN=code-server.my.domain` | If this optional variable is set, this domain will be proxied for subdomain proxying. See [Documentation](https://github.com/cdr/code-server/blob/master/docs/FAQ.md#sub-domains) | | `-e PROXY_DOMAIN=code-server.my.domain` | If this optional variable is set, this domain will be proxied for subdomain proxying. See [Documentation](https://github.com/cdr/code-server/blob/master/docs/FAQ.md#sub-domains) |
| `-e DEFAULT_WORKSPACE=/config/workspace` | If this optional variable is set, code-server will open this directory by default |
| `-v /config` | Contains all relevant configuration files. | | `-v /config` | Contains all relevant configuration files. |
## Environment variables from files (Docker secrets) ## Environment variables from files (Docker secrets)
@ -200,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" }}' lscr.io/linuxserver/code-server:latest` * `docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/code-server`
## Updating Info ## Updating Info
@ -218,7 +213,7 @@ Below are the instructions for updating containers:
### Via Docker Run ### Via Docker Run
* Update the image: `docker pull lscr.io/linuxserver/code-server:latest` * 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)
@ -266,11 +261,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Versions ## Versions
* **20.02.22:** - Install using the official tarballs. * **12.07.21:** - Rebase to focal
* **29.12.21:** - Add `install-extension` as a helper for mods to install extensions.
* **06.12.21:** - Add `DEFAULT_WORKSPACE` env var.
* **29.11.21:** - Rebase to Ubuntu focal.
* **16.09.21:** - Fix slow `chown` on large workspace (contents of workspace folder no longer chowned).
* **11.07.21:** - Bump node to 14 to fix builds * **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`.

View File

@ -3,10 +3,10 @@
# jenkins variables # jenkins variables
project_name: docker-code-server project_name: docker-code-server
external_type: na external_type: na
custom_version_command: "curl -sX GET https://api.github.com/repos/coder/code-server/releases/latest | jq -r '.tag_name' | 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,36 +1,37 @@
adduser3.118ubuntu2 adduser3.118ubuntu2
apt2.0.9 apt2.0.6
apt-utils2.0.9 apt-utils2.0.6
base-files11ubuntu5.5 base-files11ubuntu5.4
base-passwd3.5.47 base-passwd3.5.47
bash5.0-6ubuntu1.1 bash5.0-6ubuntu1.1
bsdutils1:2.34-0.1ubuntu9.3 bsdutils1:2.34-0.1ubuntu9.1
bzip21.0.8-2 bzip21.0.8-2
ca-certificates20211016~20.04.1 ca-certificates20210119~20.04.2
coreutils8.30-3ubuntu2 coreutils8.30-3ubuntu2
curl7.68.0-1ubuntu2.12 curl7.68.0-1ubuntu2.7
dash0.5.10.2-6 dash0.5.10.2-6
debconf1.5.73 debconf1.5.73
debianutils4.9.1 debianutils4.9.1
diffutils1:3.7-3 diffutils1:3.7-3
dirmngr2.2.19-3ubuntu2.2 dirmngr2.2.19-3ubuntu2.1
dpkg1.19.7ubuntu3 dpkg1.19.7ubuntu3
e2fsprogs1.45.5-2ubuntu1 e2fsprogs1.45.5-2ubuntu1
fdisk2.34-0.1ubuntu9.3 fdisk2.34-0.1ubuntu9.1
file1:5.38-4
findutils4.7.0-1ubuntu1 findutils4.7.0-1ubuntu1
gcc-10-base10.3.0-1ubuntu1~20.04 gcc-10-base10.3.0-1ubuntu1~20.04
git1:2.25.1-1ubuntu3.5 git1:2.25.1-1ubuntu3.2
git-man1:2.25.1-1ubuntu3.5 git-man1:2.25.1-1ubuntu3.2
gnupg2.2.19-3ubuntu2.2 gnupg2.2.19-3ubuntu2.1
gnupg-l10n2.2.19-3ubuntu2.2 gnupg-l10n2.2.19-3ubuntu2.1
gnupg-utils2.2.19-3ubuntu2.2 gnupg-utils2.2.19-3ubuntu2.1
gpg2.2.19-3ubuntu2.2 gpg2.2.19-3ubuntu2.1
gpg-agent2.2.19-3ubuntu2.2 gpg-agent2.2.19-3ubuntu2.1
gpgconf2.2.19-3ubuntu2.2 gpgconf2.2.19-3ubuntu2.1
gpgsm2.2.19-3ubuntu2.2 gpgsm2.2.19-3ubuntu2.1
gpgv2.2.19-3ubuntu2.2 gpgv2.2.19-3ubuntu2.1
gpg-wks-client2.2.19-3ubuntu2.2 gpg-wks-client2.2.19-3ubuntu2.1
gpg-wks-server2.2.19-3ubuntu2.2 gpg-wks-server2.2.19-3ubuntu2.1
grep3.4-1 grep3.4-1
gzip1.10-0ubuntu4 gzip1.10-0ubuntu4
hostname3.23 hostname3.23
@ -39,32 +40,31 @@ jq1.6-1ubuntu0.20.04.1
krb5-locales1.17-6ubuntu4.1 krb5-locales1.17-6ubuntu4.1
less551-1ubuntu0.1 less551-1ubuntu0.1
libacl12.2.53-6 libacl12.2.53-6
libapt-pkg6.02.0.9 libapt-pkg6.02.0.6
libasn1-8-heimdal7.7.0+dfsg-1ubuntu1 libasn1-8-heimdal7.7.0+dfsg-1ubuntu1
libassuan02.5.3-7ubuntu2 libassuan02.5.3-7ubuntu2
libatomic110.3.0-1ubuntu1~20.04
libattr11:2.4.48-5 libattr11:2.4.48-5
libaudit11:2.8.5-2ubuntu6 libaudit11:2.8.5-2ubuntu6
libaudit-common1:2.8.5-2ubuntu6 libaudit-common1:2.8.5-2ubuntu6
libblkid12.34-0.1ubuntu9.3 libblkid12.34-0.1ubuntu9.1
libbrotli11.0.7-6ubuntu0.1 libbrotli11.0.7-6ubuntu0.1
libbsd00.10.0-1 libbsd00.10.0-1
libbz2-1.01.0.8-2 libbz2-1.01.0.8-2
libc62.31-0ubuntu9.9 libc62.31-0ubuntu9.2
libcap-ng00.7.9-2.1build1 libcap-ng00.7.9-2.1build1
libc-bin2.31-0ubuntu9.7 libc-bin2.31-0ubuntu9.2
libcbor0.60.6.0-0ubuntu1 libcbor0.60.6.0-0ubuntu1
libcom-err21.45.5-2ubuntu1 libcom-err21.45.5-2ubuntu1
libcrypt11:4.4.10-10ubuntu4 libcrypt11:4.4.10-10ubuntu4
libcurl3-gnutls7.68.0-1ubuntu2.12 libcurl3-gnutls7.68.0-1ubuntu2.7
libcurl47.68.0-1ubuntu2.12 libcurl47.68.0-1ubuntu2.7
libdb5.35.3.28+dfsg1-0.6ubuntu2 libdb5.35.3.28+dfsg1-0.6ubuntu2
libdebconfclient00.251ubuntu1 libdebconfclient00.251ubuntu1
libedit23.1-20191231-1 libedit23.1-20191231-1
liberror-perl0.17029-1 liberror-perl0.17029-1
libexpat12.2.9-1ubuntu0.4 libexpat12.2.9-1build1
libext2fs21.45.5-2ubuntu1 libext2fs21.45.5-2ubuntu1
libfdisk12.34-0.1ubuntu9.3 libfdisk12.34-0.1ubuntu9.1
libffi73.3-4 libffi73.3-4
libfido2-11.3.1-1ubuntu2 libfido2-11.3.1-1ubuntu2
libgcc-s110.3.0-1ubuntu1~20.04 libgcc-s110.3.0-1ubuntu1~20.04
@ -84,16 +84,19 @@ libhx509-5-heimdal7.7.0+dfsg-1ubuntu1
libidn2-02.2.0-2 libidn2-02.2.0-2
libjq11.6-1ubuntu0.20.04.1 libjq11.6-1ubuntu0.20.04.1
libk5crypto31.17-6ubuntu4.1 libk5crypto31.17-6ubuntu4.1
libkeyutils11.6-6ubuntu1.1 libkeyutils11.6-6ubuntu1
libkrb5-26-heimdal7.7.0+dfsg-1ubuntu1 libkrb5-26-heimdal7.7.0+dfsg-1ubuntu1
libkrb5-31.17-6ubuntu4.1 libkrb5-31.17-6ubuntu4.1
libkrb5support01.17-6ubuntu4.1 libkrb5support01.17-6ubuntu4.1
libksba81.3.5-2 libksba81.3.5-2
libldap-2.4-22.4.49+dfsg-2ubuntu1.9 libldap-2.4-22.4.49+dfsg-2ubuntu1.8
libldap-common2.4.49+dfsg-2ubuntu1.9 libldap-common2.4.49+dfsg-2ubuntu1.8
liblz4-11.9.2-2ubuntu0.20.04.1 liblz4-11.9.2-2ubuntu0.20.04.1
liblzma55.2.4-1ubuntu1 liblzma55.2.4-1ubuntu1
libmount12.34-0.1ubuntu9.3 libmagic11:5.38-4
libmagic-mgc1:5.38-4
libmount12.34-0.1ubuntu9.1
libmpdec22.4.2-3
libncurses66.2-0ubuntu2 libncurses66.2-0ubuntu2
libncursesw66.2-0ubuntu2 libncursesw66.2-0ubuntu2
libnettle73.5.1+really3.5.1-2ubuntu0.2 libnettle73.5.1+really3.5.1-2ubuntu0.2
@ -101,38 +104,41 @@ libnghttp2-141.40.0-1build1
libnpth01.6-1 libnpth01.6-1
libonig56.9.4-1 libonig56.9.4-1
libp11-kit00.23.20-1ubuntu0.1 libp11-kit00.23.20-1ubuntu0.1
libpam0g1.3.1-5ubuntu4.3 libpam0g1.3.1-5ubuntu4.2
libpam-modules1.3.1-5ubuntu4.3 libpam-modules1.3.1-5ubuntu4.2
libpam-modules-bin1.3.1-5ubuntu4.3 libpam-modules-bin1.3.1-5ubuntu4.2
libpam-runtime1.3.1-5ubuntu4.3 libpam-runtime1.3.1-5ubuntu4.2
libpcre2-8-010.34-7 libpcre2-8-010.34-7
libpcre32:8.39-12build1 libpcre32:8.39-12build1
libperl5.305.30.0-9ubuntu0.2 libperl5.305.30.0-9ubuntu0.2
libprocps82:3.3.16-1ubuntu2.3 libprocps82:3.3.16-1ubuntu2.3
libpsl50.21.0-1ubuntu1 libpsl50.21.0-1ubuntu1
libpython3.8-minimal3.8.10-0ubuntu1~20.04.1
libpython3.8-stdlib3.8.10-0ubuntu1~20.04.1
libpython3-stdlib3.8.2-0ubuntu2
libreadline88.0-4 libreadline88.0-4
libroken18-heimdal7.7.0+dfsg-1ubuntu1 libroken18-heimdal7.7.0+dfsg-1ubuntu1
librtmp12.4+20151223.gitfa8646d.1-2build1 librtmp12.4+20151223.gitfa8646d.1-2build1
libsasl2-22.1.27+dfsg-2ubuntu0.1 libsasl2-22.1.27+dfsg-2
libsasl2-modules2.1.27+dfsg-2ubuntu0.1 libsasl2-modules2.1.27+dfsg-2
libsasl2-modules-db2.1.27+dfsg-2ubuntu0.1 libsasl2-modules-db2.1.27+dfsg-2
libseccomp22.5.1-1ubuntu1~20.04.2 libseccomp22.5.1-1ubuntu1~20.04.1
libselinux13.0-1build2 libselinux13.0-1build2
libsemanage13.0-1build2 libsemanage13.0-1build2
libsemanage-common3.0-1build2 libsemanage-common3.0-1build2
libsepol13.0-1 libsepol13.0-1
libsmartcols12.34-0.1ubuntu9.3 libsmartcols12.34-0.1ubuntu9.1
libsqlite3-03.31.1-4ubuntu0.3 libsqlite3-03.31.1-4ubuntu0.2
libss21.45.5-2ubuntu1 libss21.45.5-2ubuntu1
libssh-40.9.3-2ubuntu2.2 libssh-40.9.3-2ubuntu2.2
libssl1.11.1.1f-1ubuntu2.16 libssl1.11.1.1f-1ubuntu2.8
libstdc++610.3.0-1ubuntu1~20.04 libstdc++610.3.0-1ubuntu1~20.04
libsystemd0245.4-4ubuntu3.15 libsystemd0245.4-4ubuntu3.13
libtasn1-64.16.0-2 libtasn1-64.16.0-2
libtinfo66.2-0ubuntu2 libtinfo66.2-0ubuntu2
libudev1245.4-4ubuntu3.15 libudev1245.4-4ubuntu3.13
libunistring20.9.10-2 libunistring20.9.10-2
libuuid12.34-0.1ubuntu9.3 libuuid12.34-0.1ubuntu9.1
libwind0-heimdal7.7.0+dfsg-1ubuntu1 libwind0-heimdal7.7.0+dfsg-1ubuntu1
libx11-62:1.6.9-2ubuntu1.2 libx11-62:1.6.9-2ubuntu1.2
libx11-data2:1.6.9-2ubuntu1.2 libx11-data2:1.6.9-2ubuntu1.2
@ -142,19 +148,21 @@ libxdmcp61:1.1.3-0ubuntu1
libxext62:1.3.4-0ubuntu1 libxext62:1.3.4-0ubuntu1
libxmuu12:1.1.3-0ubuntu1 libxmuu12:1.1.3-0ubuntu1
libzstd11.4.4+dfsg-3ubuntu0.1 libzstd11.4.4+dfsg-3ubuntu0.1
locales2.31-0ubuntu9.9 locales2.31-0ubuntu9.2
login1:4.8.1-1ubuntu5.20.04.1 login1:4.8.1-1ubuntu5.20.04.1
logsave1.45.5-2ubuntu1 logsave1.45.5-2ubuntu1
lsb-base11.1.0ubuntu2 lsb-base11.1.0ubuntu2
mawk1.3.4.20200120-2 mawk1.3.4.20200120-2
mount2.34-0.1ubuntu9.3 mime-support3.64ubuntu1
mount2.34-0.1ubuntu9.1
nano4.8-1ubuntu1 nano4.8-1ubuntu1
ncurses-base6.2-0ubuntu2 ncurses-base6.2-0ubuntu2
ncurses-bin6.2-0ubuntu2 ncurses-bin6.2-0ubuntu2
netbase6.1 netbase6.1
net-tools1.60+git20180626.aebd88e-1ubuntu1 net-tools1.60+git20180626.aebd88e-1ubuntu1
openssh-client1:8.2p1-4ubuntu0.5 nodejs14.18.1-deb-1nodesource1
openssl1.1.1f-1ubuntu2.16 openssh-client1:8.2p1-4ubuntu0.3
openssl1.1.1f-1ubuntu2.8
passwd1:4.8.1-1ubuntu5.20.04.1 passwd1:4.8.1-1ubuntu5.20.04.1
patch2.7.6-6 patch2.7.6-6
perl5.30.0-9ubuntu0.2 perl5.30.0-9ubuntu0.2
@ -163,14 +171,20 @@ perl-modules-5.305.30.0-9ubuntu0.2
pinentry-curses1.1.0-3build1 pinentry-curses1.1.0-3build1
procps2:3.3.16-1ubuntu2.3 procps2:3.3.16-1ubuntu2.3
publicsuffix20200303.0012-1 publicsuffix20200303.0012-1
python33.8.2-0ubuntu2
python3.83.8.10-0ubuntu1~20.04.1
python3.8-minimal3.8.10-0ubuntu1~20.04.1
python3-minimal3.8.2-0ubuntu2
readline-common8.0-4 readline-common8.0-4
sed4.7-1 sed4.7-1
sensible-utils0.0.12+nmu1 sensible-utils0.0.12+nmu1
sudo1.8.31-1ubuntu1.2 sudo1.8.31-1ubuntu1.2
sysvinit-utils2.96-2.1ubuntu1 sysvinit-utils2.96-2.1ubuntu1
tar1.30+dfsg-7ubuntu0.20.04.2 tar1.30+dfsg-7ubuntu0.20.04.1
tzdata2022a-0ubuntu0.20.04 tzdata2021a-2ubuntu0.20.04
ubuntu-keyring2020.02.11.4 ubuntu-keyring2020.02.11.4
util-linux2.34-0.1ubuntu9.3 util-linux2.34-0.1ubuntu9.1
xauth1:1.1-0ubuntu1 xauth1:1.1-0ubuntu1
xz-utils5.2.4-1ubuntu1
yarn1.22.15-1
zlib1g1:1.2.11.dfsg-2ubuntu1.2 zlib1g1:1.2.11.dfsg-2ubuntu1.2

View File

@ -29,8 +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: "focal", desc: "DEPRECATED (no longer updated, `latest` is rebased on focal) - Stable releases, based on Ubuntu Focal" } - { tag: "focal", desc: "Stable releases, on a focal baseiamge" }
- { tag: "development", desc: "DEPRECATED (no longer updated) - Prereleases from their GitHub" }
# container parameters # container parameters
common_param_env_vars_enabled: true common_param_env_vars_enabled: true
@ -53,7 +52,6 @@ opt_param_env_vars:
- { env_var: "SUDO_PASSWORD", env_value: "password", desc: "If this optional variable is set, user will have sudo access in the code-server terminal with the specified password." } - { env_var: "SUDO_PASSWORD", env_value: "password", desc: "If this optional variable is set, user will have sudo access in the code-server terminal with the specified password." }
- { env_var: "SUDO_PASSWORD_HASH", env_value: "", desc: "Optionally set sudo password via hash (takes priority over `SUDO_PASSWORD` var). Format is `$type$salt$hashed`." } - { env_var: "SUDO_PASSWORD_HASH", env_value: "", desc: "Optionally set sudo password via hash (takes priority over `SUDO_PASSWORD` var). Format is `$type$salt$hashed`." }
- { env_var: "PROXY_DOMAIN", env_value: "code-server.my.domain", desc: "If this optional variable is set, this domain will be proxied for subdomain proxying. See [Documentation](https://github.com/cdr/code-server/blob/master/docs/FAQ.md#sub-domains)" } - { env_var: "PROXY_DOMAIN", env_value: "code-server.my.domain", desc: "If this optional variable is set, this domain will be proxied for subdomain proxying. See [Documentation](https://github.com/cdr/code-server/blob/master/docs/FAQ.md#sub-domains)" }
- { env_var: "DEFAULT_WORKSPACE", env_value: "/config/workspace", desc: "If this optional variable is set, code-server will open this directory by default" }
optional_block_1: false optional_block_1: false
optional_block_1_items: "" optional_block_1_items: ""
@ -77,11 +75,7 @@ app_setup_block: |
# changelog # changelog
changelogs: changelogs:
- { date: "20.02.22:", desc: "Install using the official tarballs." } - { date: "12.07.21:", desc: "Rebase to focal" }
- { date: "29.12.21:", desc: "Add `install-extension` as a helper for mods to install extensions." }
- { date: "06.12.21:", desc: "Add `DEFAULT_WORKSPACE` env var." }
- { date: "29.11.21:", desc: "Rebase to Ubuntu focal." }
- { date: "16.09.21:", desc: "Fix slow `chown` on large workspace (contents of workspace folder no longer chowned)." }
- { date: "11.07.21:", desc: "Bump node to 14 to fix builds" } - { 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`." }

View File

@ -17,26 +17,6 @@ if [ -n "${SUDO_PASSWORD}" ] || [ -n "${SUDO_PASSWORD_HASH}" ]; then
fi fi
fi fi
[[ ! -f /config/.bashrc ]] && \
cp /root/.bashrc /config/.bashrc
[[ ! -f /config/.profile ]] && \
cp /root/.profile /config/.profile
# permissions # permissions
if [ -f "/usr/bin/find" ] && [ -f "/usr/bin/xargs" ]; then chown -R abc:abc \
CORES=$(nproc --all) /config
# Split workload between config and workspace
echo "setting permissions::configuration"
find /config -path /config/workspace -prune -false -o -type d -print0 | \
xargs --null -r --max-args=1 --max-procs=$((CORES*2*8)) \
chown -R abc:abc
echo "setting permissions::workspace"
chown abc:abc /config/workspace
else
# Set permissions on data mount
# do not decend into the workspace
chown -R abc:abc "$(ls /config -I workspace)"
chown abc:abc /config/workspace
fi

View File

@ -15,11 +15,11 @@ fi
exec \ exec \
s6-setuidgid abc \ s6-setuidgid abc \
/app/code-server/bin/code-server \ /usr/local/bin/code-server \
--bind-addr 0.0.0.0:8443 \ --bind-addr 0.0.0.0:8443 \
--user-data-dir /config/data \ --user-data-dir /config/data \
--extensions-dir /config/extensions \ --extensions-dir /config/extensions \
--disable-telemetry \ --disable-telemetry \
--auth "${AUTH}" \ --auth "${AUTH}" \
"${PROXY_DOMAIN_ARG}" \ "${PROXY_DOMAIN_ARG}" \
"${DEFAULT_WORKSPACE:-/config/workspace}" /config/workspace

View File

@ -1,10 +0,0 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
_install=(/app/code-server/bin/code-server "--extensions-dir" "/config/extensions" "--install-extension")
if [ "$(whoami)" == "abc" ]; then
"${_install[@]}" "$@"
else
s6-setuidgid abc "${_install[@]}" "$@"
fi