Compare commits

..

No commits in common. "master" and "v3.10.2-ls83" have entirely different histories.

38 changed files with 1020 additions and 1881 deletions

View File

@ -15,6 +15,6 @@ trim_trailing_whitespace = false
indent_style = space indent_style = space
indent_size = 2 indent_size = 2
[{**.sh,root/etc/s6-overlay/s6-rc.d/**,root/etc/cont-init.d/**,root/etc/services.d/**}] [{**.sh,root/etc/cont-init.d/**,root/etc/services.d/**}]
indent_style = space indent_style = space
indent_size = 4 indent_size = 4

View File

@ -6,7 +6,7 @@
* Read, and fill the Pull Request template * Read, and fill the Pull Request template
* 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 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://linuxserver.io/discord) * 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)
## Common files ## Common files
@ -105,10 +105,10 @@ docker build \
-t linuxserver/code-server:latest . -t linuxserver/code-server:latest .
``` ```
The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static` The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
```bash ```bash
docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset docker run --rm --privileged multiarch/qemu-user-static:register --reset
``` ```
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`. Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.

View File

@ -1,7 +1,7 @@
blank_issues_enabled: false blank_issues_enabled: false
contact_links: contact_links:
- name: Discord chat support - name: Discord chat support
url: https://linuxserver.io/discord url: https://discord.gg/YWrKVTn
about: Realtime support / chat with the community and the team. about: Realtime support / chat with the community and the team.
- name: Discourse discussion forum - name: Discourse discussion forum

40
.github/ISSUE_TEMPLATE/issue.bug.md vendored Executable file
View File

@ -0,0 +1,40 @@
---
name: Bug report
about: Create a report to help us improve
---
[linuxserverurl]: https://linuxserver.io
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)][linuxserverurl]
<!--- If you are new to Docker or this application our issue tracker is **ONLY** used for reporting bugs or requesting features. Please use [our discord server](https://discord.gg/YWrKVTn) for general support. --->
<!--- Provide a general summary of the bug in the Title above -->
------------------------------
## Expected Behavior
<!--- Tell us what should happen -->
## Current Behavior
<!--- Tell us what happens instead of the expected behavior -->
## Steps to Reproduce
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
<!--- reproduce this bug. Include code to reproduce, if relevant -->
1.
2.
3.
4.
## Environment
**OS:**
**CPU architecture:** x86_64/arm32/arm64
**How docker service was installed:**
<!--- ie. from the official docker repo, from the distro repo, nas OS provided, etc. -->
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
## Command used to create docker container (run/create/compose/screenshot)
<!--- Provide your docker create/run command or compose yaml snippet, or a screenshot of settings if using a gui to create the container -->
## Docker logs
<!--- Provide a full docker log, output of "docker logs code-server" -->

View File

@ -1,76 +0,0 @@
# Based on the issue template
name: Bug report
description: Create a report to help us improve
title: "[BUG] <title>"
labels: [Bug]
body:
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue already exists for the bug you encountered.
options:
- label: I have searched the existing issues
required: true
- type: textarea
attributes:
label: Current Behavior
description: Tell us what happens instead of the expected behavior.
validations:
required: true
- type: textarea
attributes:
label: Expected Behavior
description: Tell us what should happen.
validations:
required: false
- type: textarea
attributes:
label: Steps To Reproduce
description: Steps to reproduce the behavior.
placeholder: |
1. In this environment...
2. With this config...
3. Run '...'
4. See error...
validations:
required: true
- type: textarea
attributes:
label: Environment
description: |
examples:
- **OS**: Ubuntu 20.04
- **How docker service was installed**: distro's packagemanager
value: |
- OS:
- How docker service was installed:
render: markdown
validations:
required: false
- type: dropdown
attributes:
label: CPU architecture
options:
- x86-64
- arm64
validations:
required: true
- type: textarea
attributes:
label: Docker creation
description: |
Command used to create docker container
Provide your docker create/run command or compose yaml snippet, or a screenshot of settings if using a gui to create the container
render: bash
validations:
required: true
- type: textarea
attributes:
description: |
Provide a full docker log, output of "docker logs code-server"
label: Container logs
placeholder: |
Output of `docker logs code-server`
render: bash
validations:
required: true

25
.github/ISSUE_TEMPLATE/issue.feature.md vendored Executable file
View File

@ -0,0 +1,25 @@
---
name: Feature request
about: Suggest an idea for this project
---
[linuxserverurl]: https://linuxserver.io
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)][linuxserverurl]
<!--- If you are new to Docker or this application our issue tracker is **ONLY** used for reporting bugs or requesting features. Please use [our discord server](https://discord.gg/YWrKVTn) for general support. --->
<!--- If this acts as a feature request please 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/ -->
<!--- Provide a general summary of the request in the Title above -->
------------------------------
## Desired Behavior
<!--- Tell us what should happen -->
## Current Behavior
<!--- Tell us what happens instead of the expected behavior -->
## Alternatives Considered
<!--- Tell us what other options you have tried or considered -->

View File

@ -1,31 +0,0 @@
# Based on the issue template
name: Feature request
description: Suggest an idea for this project
title: "[FEAT] <title>"
labels: [enhancement]
body:
- type: checkboxes
attributes:
label: Is this a new feature request?
description: Please search to see if a feature request already exists.
options:
- label: I have searched the existing issues
required: true
- type: textarea
attributes:
label: Wanted change
description: Tell us what you want to happen.
validations:
required: true
- type: textarea
attributes:
label: Reason for change
description: Justify your request, why do you want it, what is the benefit.
validations:
required: true
- type: textarea
attributes:
label: Proposed code change
description: Do you have a potential code change in mind?
validations:
required: false

View File

@ -1,16 +0,0 @@
name: Issue & PR Tracker
on:
issues:
types: [opened,reopened,labeled,unlabeled,closed]
pull_request_target:
types: [opened,reopened,review_requested,review_request_removed,labeled,unlabeled,closed]
pull_request_review:
types: [submitted,edited,dismissed]
jobs:
manage-project:
permissions:
issues: write
uses: linuxserver/github-workflows/.github/workflows/issue-pr-tracker.yml@v1
secrets: inherit

View File

@ -1,13 +0,0 @@
name: Mark stale issues and pull requests
on:
schedule:
- cron: '31 1 * * *'
workflow_dispatch:
jobs:
stale:
permissions:
issues: write
pull-requests: write
uses: linuxserver/github-workflows/.github/workflows/issues-cron.yml@v1
secrets: inherit

View File

@ -7,35 +7,20 @@ jobs:
external-trigger-master: external-trigger-master:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4.1.1 - uses: actions/checkout@v2.3.3
- name: External Trigger - name: External Trigger
if: github.ref == 'refs/heads/master' if: github.ref == 'refs/heads/master'
env:
SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }}
run: | run: |
printf "# External trigger for docker-code-server\n\n" >> $GITHUB_STEP_SUMMARY if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_CODE_SERVER_MASTER }}" ]; then
if grep -q "^code-server_master_" <<< "${SKIP_EXTERNAL_TRIGGER}"; then echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_CODE_SERVER_MASTER is set; skipping trigger. ****"
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`code-server_master_\`; will skip trigger if version matches." >> $GITHUB_STEP_SUMMARY
elif grep -q "^code-server_master" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`code-server_master\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> External trigger running off of master branch. To disable this trigger, add \`code-server_master\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY
printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY
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||')
echo "Type is \`custom_version_command\`" >> $GITHUB_STEP_SUMMARY
if grep -q "^code-server_master_${EXT_RELEASE}" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` matches current external release; skipping trigger." >> $GITHUB_STEP_SUMMARY
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 "**** Retrieving external version ****"
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 "> [!WARNING]" >> $GITHUB_STEP_SUMMARY echo "**** Can't retrieve external version, exiting ****"
echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="Can't retrieve external version for code-server branch master" FAILURE_REASON="Can't retrieve external version for code-server branch master"
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,
@ -44,8 +29,8 @@ jobs:
exit 1 exit 1
fi fi
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g') EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "External version: \`${EXT_RELEASE}\`" >> $GITHUB_STEP_SUMMARY echo "**** External version: ${EXT_RELEASE} ****"
echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY echo "**** Retrieving last pushed version ****"
image="linuxserver/code-server" image="linuxserver/code-server"
tag="latest" tag="latest"
token=$(curl -sX GET \ token=$(curl -sX GET \
@ -53,83 +38,47 @@ jobs:
| jq -r '.token') | jq -r '.token')
multidigest=$(curl -s \ multidigest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \ --header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Accept: application/vnd.oci.image.index.v1+json" \
--header "Authorization: Bearer ${token}" \ --header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${tag}") "https://ghcr.io/v2/${image}/manifests/${tag}" \
if jq -e '.layers // empty' <<< "${multidigest}" >/dev/null 2>&1; then | jq -r 'first(.manifests[].digest)')
# If there's a layer element it's a single-arch manifest so just get that digest digest=$(curl -s \
digest=$(jq -r '.config.digest' <<< "${multidigest}")
else
# Otherwise it's multi-arch or has manifest annotations
if jq -e '.manifests[]?.annotations // empty' <<< "${multidigest}" >/dev/null 2>&1; then
# Check for manifest annotations and delete if found
multidigest=$(jq 'del(.manifests[] | select(.annotations))' <<< "${multidigest}")
fi
if [[ $(jq '.manifests | length' <<< "${multidigest}") -gt 1 ]]; then
# If there's still more than one digest, it's multi-arch
multidigest=$(jq -r ".manifests[] | select(.platform.architecture == \"amd64\").digest?" <<< "${multidigest}")
else
# Otherwise it's single arch
multidigest=$(jq -r ".manifests[].digest?" <<< "${multidigest}")
fi
if digest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \ --header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Accept: application/vnd.oci.image.manifest.v1+json" \
--header "Authorization: Bearer ${token}" \ --header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${multidigest}"); then "https://ghcr.io/v2/${image}/manifests/${multidigest}" \
digest=$(jq -r '.config.digest' <<< "${digest}"); | jq -r '.config.digest')
fi
fi
image_info=$(curl -sL \ image_info=$(curl -sL \
--header "Authorization: Bearer ${token}" \ --header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/blobs/${digest}") "https://ghcr.io/v2/${image}/blobs/${digest}" \
if [[ $(echo $image_info | jq -r '.container_config') == "null" ]]; then | jq -r '.container_config')
image_info=$(echo $image_info | jq -r '.config')
else
image_info=$(echo $image_info | jq -r '.container_config')
fi
IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}') IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}')
IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}') IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}')
if [ -z "${IMAGE_VERSION}" ]; then if [ -z "${IMAGE_VERSION}" ]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY echo "**** Can't retrieve last pushed version, exiting ****"
echo "Can't retrieve last pushed version, exiting" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="Can't retrieve last pushed version for code-server tag latest" FAILURE_REASON="Can't retrieve last pushed version for code-server tag latest"
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"}], "description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1 exit 1
fi fi
echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY echo "**** Last pushed version: ${IMAGE_VERSION} ****"
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then
echo "Version \`${EXT_RELEASE}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY 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/master/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" >> $GITHUB_STEP_SUMMARY echo "**** New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting ****"
exit 0 exit 0
else else
if [[ "${artifacts_found}" == "false" ]]; then echo "**** New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build ****"
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> New version detected, but not all artifacts are published yet; skipping trigger" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="New version ${EXT_RELEASE} for code-server tag latest is detected, however not all artifacts are uploaded to upstream release yet. Will try again later."
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
else
printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY
echo "New version \`${EXT_RELEASE}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY
if [[ "${artifacts_found}" == "true" ]]; then
echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY
fi
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/master/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'})" >> $GITHUB_STEP_SUMMARY echo "**** Jenkins job queue url: ${response%$'\r'} ****"
echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY echo "**** Sleeping 10 seconds until job starts ****"
sleep 10 sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url') buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}" buildurl="${buildurl%$'\r'}"
echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY echo "**** Jenkins job build url: ${buildurl} ****"
echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY echo "**** Attempting to change the Jenkins job description ****"
curl -iX POST \ curl -iX POST \
"${buildurl}submitDescription" \ "${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \ --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
@ -141,4 +90,3 @@ jobs:
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}], "description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi fi
fi

View File

@ -2,44 +2,42 @@ name: External Trigger Scheduler
on: on:
schedule: schedule:
- cron: '32 * * * *' - cron: '41 * * * *'
workflow_dispatch: workflow_dispatch:
jobs: jobs:
external-trigger-scheduler: external-trigger-scheduler:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4.1.1 - uses: actions/checkout@v2.3.3
with: with:
fetch-depth: '0' fetch-depth: '0'
- name: External Trigger Scheduler - name: External Trigger Scheduler
run: | run: |
printf "# External trigger scheduler for docker-code-server\n\n" >> $GITHUB_STEP_SUMMARY echo "**** Branches found: ****"
printf "Found the branches:\n\n%s\n" "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" >> $GITHUB_STEP_SUMMARY git for-each-ref --format='%(refname:short)' refs/remotes
for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes) echo "**** Pulling the yq docker image ****"
docker pull ghcr.io/linuxserver/yq
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
do do
if [[ "${br}" == "HEAD" ]]; then br=$(echo "$br" | sed 's|origin/||g')
printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY echo "**** Evaluating branch ${br} ****"
continue ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-code-server/${br}/jenkins-vars.yml \
fi | docker run --rm -i --entrypoint yq ghcr.io/linuxserver/yq -r .ls_branch)
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY if [ "$br" == "$ls_branch" ]; then
ls_jenkins_vars=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-code-server/${br}/jenkins-vars.yml) echo "**** Branch ${br} appears to be live; checking workflow. ****"
ls_branch=$(echo "${ls_jenkins_vars}" | yq -r '.ls_branch')
ls_trigger=$(echo "${ls_jenkins_vars}" | yq -r '.external_type')
if [[ "${br}" == "${ls_branch}" ]] && [[ "${ls_trigger}" != "os" ]]; then
echo "Branch appears to be live and trigger is not os; checking workflow." >> $GITHUB_STEP_SUMMARY
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-code-server/${br}/.github/workflows/external_trigger.yml > /dev/null 2>&1; then if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-code-server/${br}/.github/workflows/external_trigger.yml > /dev/null 2>&1; then
echo "Triggering external trigger workflow for branch." >> $GITHUB_STEP_SUMMARY echo "**** Workflow exists. Triggering external trigger workflow for branch ${br} ****."
curl -iX POST \ curl -iX POST \
-H "Authorization: token ${{ secrets.CR_PAT }}" \ -H "Authorization: token ${{ secrets.CR_PAT }}" \
-H "Accept: application/vnd.github.v3+json" \ -H "Accept: application/vnd.github.v3+json" \
-d "{\"ref\":\"refs/heads/${br}\"}" \ -d "{\"ref\":\"refs/heads/${br}\"}" \
https://api.github.com/repos/linuxserver/docker-code-server/actions/workflows/external_trigger.yml/dispatches https://api.github.com/repos/linuxserver/docker-code-server/actions/workflows/external_trigger.yml/dispatches
else else
echo "Skipping branch due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY echo "**** Workflow doesn't exist; skipping trigger. ****"
fi fi
else else
echo "Skipping branch due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY echo "**** ${br} appears to be a dev branch; skipping trigger. ****"
fi fi
done done

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 relevant issue templates, or risk having this issue marked as invalid.' 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!'
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/master/.github/PULL_REQUEST_TEMPLATE.md)!'
repo-token: ${{ secrets.GITHUB_TOKEN }} repo-token: ${{ secrets.GITHUB_TOKEN }}

38
.github/workflows/package_trigger.yml vendored Normal file
View File

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

View File

@ -2,99 +2,49 @@ name: Package Trigger Scheduler
on: on:
schedule: schedule:
- cron: '0 20 * * 6' - cron: '00 12 * * 0'
workflow_dispatch: workflow_dispatch:
jobs: jobs:
package-trigger-scheduler: package-trigger-scheduler:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4.1.1 - uses: actions/checkout@v2.3.3
with: with:
fetch-depth: '0' fetch-depth: '0'
- name: Package Trigger Scheduler - name: Package Trigger Scheduler
env:
SKIP_PACKAGE_TRIGGER: ${{ vars.SKIP_PACKAGE_TRIGGER }}
run: | run: |
printf "# Package trigger scheduler for docker-code-server\n\n" >> $GITHUB_STEP_SUMMARY echo "**** Branches found: ****"
printf "Found the branches:\n\n%s\n" "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" >> $GITHUB_STEP_SUMMARY git for-each-ref --format='%(refname:short)' refs/remotes
for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes) echo "**** Pulling the yq docker image ****"
docker pull ghcr.io/linuxserver/yq
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
do do
if [[ "${br}" == "HEAD" ]]; then br=$(echo "$br" | sed 's|origin/||g')
printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY echo "**** Evaluating branch ${br} ****"
continue ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-code-server/${br}/jenkins-vars.yml \
fi | docker run --rm -i --entrypoint yq ghcr.io/linuxserver/yq -r .ls_branch)
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY if [ "${br}" == "${ls_branch}" ]; then
JENKINS_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-code-server/${br}/jenkins-vars.yml) echo "**** Branch ${br} appears to be live; checking workflow. ****"
if ! curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-code-server/${br}/Jenkinsfile >/dev/null 2>&1; then if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-code-server/${br}/.github/workflows/package_trigger.yml > /dev/null 2>&1; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY echo "**** Workflow exists. Triggering package trigger workflow for branch ${br}. ****"
echo "> No Jenkinsfile found. Branch is either deprecated or is an early dev branch." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [[ "${br}" == $(yq -r '.ls_branch' <<< "${JENKINS_VARS}") ]]; then
echo "Branch appears to be live; checking workflow." >> $GITHUB_STEP_SUMMARY
README_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-code-server/${br}/readme-vars.yml)
if [[ $(yq -r '.project_deprecation_status' <<< "${README_VARS}") == "true" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Branch appears to be deprecated; skipping trigger." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [[ $(yq -r '.skip_package_check' <<< "${JENKINS_VARS}") == "true" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Skipping branch ${br} due to \`skip_package_check\` being set in \`jenkins-vars.yml\`." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif grep -q "^code-server_${br}" <<< "${SKIP_PACKAGE_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_PACKAGE_TRIGGER\` contains \`code-server_${br}\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-code-server/job/${br}/lastBuild/api/json | jq -r '.building' 2>/dev/null) == "true" ]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> There already seems to be an active build on Jenkins; skipping package trigger for ${br}" >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
else
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> Triggering package trigger for branch ${br}" >> $GITHUB_STEP_SUMMARY
printf "> To disable, add \`code-server_%s\` into the Github organizational variable \`SKIP_PACKAGE_TRIGGER\`.\n\n" "${br}" >> $GITHUB_STEP_SUMMARY
triggered_branches="${triggered_branches}${br} " triggered_branches="${triggered_branches}${br} "
response=$(curl -iX POST \ curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-code-server/job/${br}/buildWithParameters?PACKAGE_CHECK=true \ -H "Authorization: token ${{ secrets.CR_PAT }}" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|") -H "Accept: application/vnd.github.v3+json" \
if [[ -z "${response}" ]]; then -d "{\"ref\":\"refs/heads/${br}\"}" \
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY https://api.github.com/repos/linuxserver/docker-code-server/actions/workflows/package_trigger.yml/dispatches
echo "> Jenkins build could not be triggered. Skipping branch." sleep 30
continue else
fi echo "**** Workflow doesn't exist; skipping trigger. ****"
echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
if ! curl -ifX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Unable to change the Jenkins job description."
fi
sleep 20
fi fi
else else
echo "Skipping branch ${br} due to being detected as dev branch." >> $GITHUB_STEP_SUMMARY echo "**** ${br} appears to be a dev branch; skipping trigger. ****"
fi fi
done done
if [[ -n "${triggered_branches}" ]] || [[ -n "${skipped_branches}" ]]; then
if [[ -n "${triggered_branches}" ]]; then
NOTIFY_BRANCHES="**Triggered:** ${triggered_branches} \n"
NOTIFY_BUILD_URL="**Build URL:** https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-code-server/activity/ \n"
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****" echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****"
fi
if [[ -n "${skipped_branches}" ]]; then
NOTIFY_BRANCHES="${NOTIFY_BRANCHES}**Skipped:** ${skipped_branches} \n"
fi
echo "**** Notifying Discord ****" echo "**** Notifying Discord ****"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Package Check Build(s) for code-server** \n'"${NOTIFY_BRANCHES}"''"${NOTIFY_BUILD_URL}"'"}], "description": "**Package Check Build(s) Triggered for code-server** \n**Branch(es):** '"${triggered_branches}"' \n**Build URL:** '"https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-code-server/activity/"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi

View File

@ -1,12 +0,0 @@
name: Permission check
on:
pull_request_target:
paths:
- '**/run'
- '**/finish'
- '**/check'
- 'root/migrations/*'
jobs:
permission_check:
uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1

23
.github/workflows/stale.yml vendored Executable file
View File

@ -0,0 +1,23 @@
name: Mark stale issues and pull requests
on:
schedule:
- cron: "30 1 * * *"
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v3
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-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-issue-label: 'no-issue-activity'
stale-pr-label: 'no-pr-activity'
days-before-stale: 30
days-before-close: 365
exempt-issue-labels: 'awaiting-approval,work-in-progress'
exempt-pr-labels: 'awaiting-approval,work-in-progress'
repo-token: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,6 +1,4 @@
# syntax=docker/dockerfile:1 FROM ghcr.io/linuxserver/baseimage-ubuntu:bionic
FROM ghcr.io/linuxserver/baseimage-ubuntu:noble
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@ -10,34 +8,54 @@ LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DA
LABEL maintainer="aptalca" LABEL maintainer="aptalca"
# environment settings # environment settings
ARG DEBIAN_FRONTEND="noninteractive"
ENV HOME="/config" ENV HOME="/config"
RUN \ RUN \
echo "**** install runtime dependencies ****" && \ echo "**** install node repo ****" && \
apt-get update && \ apt-get update && \
apt-get install -y \
gnupg && \
curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - && \
echo 'deb https://deb.nodesource.com/node_12.x bionic main' \
> /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 ****" && \
apt-get update && \
apt-get install -y \
build-essential \
libx11-dev \
libxkbfile-dev \
libsecret-1-dev \
pkg-config && \
echo "**** install runtime dependencies ****" && \
apt-get install -y \ apt-get install -y \
git \ git \
libatomic1 \ jq \
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 && \ fi && \
mkdir -p /app/code-server && \ CODE_VERSION=$(echo "$CODE_RELEASE" | awk '{print substr($1,2); }') && \
curl -o \ yarn config set network-timeout 600000 -g && \
/tmp/code-server.tar.gz -L \ yarn --production --verbose --frozen-lockfile global add code-server@"$CODE_VERSION" && \
"https://github.com/coder/code-server/releases/download/v${CODE_RELEASE}/code-server-${CODE_RELEASE}-linux-amd64.tar.gz" && \ yarn cache clean && \
tar xf /tmp/code-server.tar.gz -C \
/app/code-server --strip-components=1 && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** clean up ****" && \ echo "**** clean up ****" && \
apt-get purge --auto-remove -y \
build-essential \
libx11-dev \
libxkbfile-dev \
libsecret-1-dev \
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,6 +1,4 @@
# syntax=docker/dockerfile:1 FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-bionic
FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-noble
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@ -10,34 +8,54 @@ LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DA
LABEL maintainer="aptalca" LABEL maintainer="aptalca"
# environment settings # environment settings
ARG DEBIAN_FRONTEND="noninteractive"
ENV HOME="/config" ENV HOME="/config"
RUN \ RUN \
echo "**** install runtime dependencies ****" && \ echo "**** install node repo ****" && \
apt-get update && \ apt-get update && \
apt-get install -y \
gnupg && \
curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - && \
echo 'deb https://deb.nodesource.com/node_12.x bionic main' \
> /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 ****" && \
apt-get update && \
apt-get install -y \
build-essential \
libx11-dev \
libxkbfile-dev \
libsecret-1-dev \
pkg-config && \
echo "**** install runtime dependencies ****" && \
apt-get install -y \ apt-get install -y \
git \ git \
libatomic1 \ jq \
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 && \ fi && \
mkdir -p /app/code-server && \ CODE_VERSION=$(echo "$CODE_RELEASE" | awk '{print substr($1,2); }') && \
curl -o \ yarn config set network-timeout 600000 -g && \
/tmp/code-server.tar.gz -L \ yarn --production --verbose --frozen-lockfile global add code-server@"$CODE_VERSION" && \
"https://github.com/coder/code-server/releases/download/v${CODE_RELEASE}/code-server-${CODE_RELEASE}-linux-arm64.tar.gz" && \ yarn cache clean && \
tar xf /tmp/code-server.tar.gz -C \
/app/code-server --strip-components=1 && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** clean up ****" && \ echo "**** clean up ****" && \
apt-get purge --auto-remove -y \
build-essential \
libx11-dev \
libxkbfile-dev \
libsecret-1-dev \
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/*

67
Dockerfile.armhf Normal file
View File

@ -0,0 +1,67 @@
FROM ghcr.io/linuxserver/baseimage-ubuntu:arm32v7-bionic
# set version label
ARG BUILD_DATE
ARG VERSION
ARG CODE_RELEASE
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
LABEL maintainer="aptalca"
# environment settings
ENV HOME="/config"
RUN \
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 - && \
echo 'deb https://deb.nodesource.com/node_12.x bionic main' \
> /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 ****" && \
apt-get update && \
apt-get install -y \
build-essential \
libx11-dev \
libxkbfile-dev \
libsecret-1-dev \
pkg-config && \
echo "**** install runtime dependencies ****" && \
apt-get install -y \
git \
jq \
nano \
net-tools \
nodejs \
sudo \
yarn && \
echo "**** install code-server ****" && \
if [ -z ${CODE_RELEASE+x} ]; then \
CODE_RELEASE=$(curl -sX GET https://registry.yarnpkg.com/code-server \
| jq -r '."dist-tags".latest' | sed 's|^|v|'); \
fi && \
CODE_VERSION=$(echo "$CODE_RELEASE" | awk '{print substr($1,2); }') && \
yarn config set network-timeout 600000 -g && \
yarn --production --verbose --frozen-lockfile global add code-server@"$CODE_VERSION" && \
yarn cache clean && \
echo "**** clean up ****" && \
apt-get purge --auto-remove -y \
build-essential \
libx11-dev \
libxkbfile-dev \
libsecret-1-dev \
pkg-config && \
apt-get clean && \
rm -rf \
/tmp/* \
/var/lib/apt/lists/* \
/var/tmp/*
# add local files
COPY /root /
# ports and volumes
EXPOSE 8443

865
Jenkinsfile vendored

File diff suppressed because it is too large Load Diff

202
README.md
View File

@ -1,9 +1,10 @@
<!-- DO NOT EDIT THIS FILE MANUALLY --> <!-- DO NOT EDIT THIS FILE MANUALLY -->
<!-- Please read https://github.com/linuxserver/docker-code-server/blob/master/.github/CONTRIBUTING.md --> <!-- Please read the https://github.com/linuxserver/docker-code-server/blob/master/.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)
[![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!") [![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!")
[![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://linuxserver.io/discord "realtime support / chat with the community and the team.") [![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://discord.gg/YWrKVTn "realtime support / chat with the community and the team.")
[![Discourse](https://img.shields.io/discourse/https/discourse.linuxserver.io/topics.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=discourse)](https://discourse.linuxserver.io "post on our community forum.") [![Discourse](https://img.shields.io/discourse/https/discourse.linuxserver.io/topics.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=discourse)](https://discourse.linuxserver.io "post on our community forum.")
[![Fleet](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Fleet)](https://fleet.linuxserver.io "an online web interface which displays all of our maintained images.") [![Fleet](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Fleet)](https://fleet.linuxserver.io "an online web interface which displays all of our maintained images.")
[![GitHub](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub&logo=github)](https://github.com/linuxserver "view the source for all of our repositories.") [![GitHub](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub&logo=github)](https://github.com/linuxserver "view the source for all of our repositories.")
@ -20,7 +21,7 @@ The [LinuxServer.io](https://linuxserver.io) team brings you another container r
Find us at: Find us at:
* [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more! * [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more!
* [Discord](https://linuxserver.io/discord) - realtime support / chat with the community and the team. * [Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team.
* [Discourse](https://discourse.linuxserver.io) - post on our community forum. * [Discourse](https://discourse.linuxserver.io) - post on our community forum.
* [Fleet](https://fleet.linuxserver.io) - an online web interface which displays all of our maintained images. * [Fleet](https://fleet.linuxserver.io) - an online web interface which displays all of our maintained images.
* [GitHub](https://github.com/linuxserver) - view the source for all of our repositories. * [GitHub](https://github.com/linuxserver) - view the source for all of our repositories.
@ -28,12 +29,10 @@ 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)
[![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)
[![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)
[![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%2Fmaster%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-code-server/job/master/)
@ -51,17 +50,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://distribution.github.io/distribution/spec/manifest-v2-2/#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 `ghcr.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 | ❌ | | | armhf | arm32v7-latest |
## Version 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 | Description |
| :----: | --- |
| latest | Stable releases |
| development | DEPRECATED (no longer updated) - Prereleases from their GitHub |
## Application Setup ## Application Setup
@ -80,31 +88,28 @@ How to create the [hashed password](https://github.com/cdr/code-server/blob/mast
## Usage ## Usage
To help you get started creating a container from this image you can either use docker-compose or the docker cli. Here are some example snippets to help you get started creating a container.
>[!NOTE]
>Unless a parameter is flaged as 'optional', it is *mandatory* and a value must be provided.
### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose)) ### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
```yaml ```yaml
--- ---
version: "2.1"
services: services:
code-server: code-server:
image: lscr.io/linuxserver/code-server:latest image: ghcr.io/linuxserver/code-server
container_name: code-server container_name: code-server
environment: environment:
- PUID=1000 - PUID=1000
- PGID=1000 - PGID=1000
- TZ=Etc/UTC - TZ=Europe/London
- PASSWORD=password #optional - PASSWORD=password #optional
- HASHED_PASSWORD= #optional - HASHED_PASSWORD= #optional
- 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/code-server/config:/config - /path/to/appdata/config:/config
ports: ports:
- 8443:8443 - 8443:8443
restart: unless-stopped restart: unless-stopped
@ -117,35 +122,33 @@ docker run -d \
--name=code-server \ --name=code-server \
-e PUID=1000 \ -e PUID=1000 \
-e PGID=1000 \ -e PGID=1000 \
-e TZ=Etc/UTC \ -e TZ=Europe/London \
-e PASSWORD=password `#optional` \ -e PASSWORD=password `#optional` \
-e HASHED_PASSWORD= `#optional` \ -e HASHED_PASSWORD= `#optional` \
-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/code-server/config:/config \ -v /path/to/appdata/config:/config \
--restart unless-stopped \ --restart unless-stopped \
lscr.io/linuxserver/code-server:latest ghcr.io/linuxserver/code-server
``` ```
## Parameters ## Parameters
Containers are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container. Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container.
| Parameter | Function | | Parameter | Function |
| :----: | --- | | :----: | --- |
| `-p 8443:8443` | web gui | | `-p 8443` | web gui |
| `-e PUID=1000` | for UserID - see below for explanation | | `-e PUID=1000` | for UserID - see below for explanation |
| `-e PGID=1000` | for GroupID - see below for explanation | | `-e PGID=1000` | for GroupID - see below for explanation |
| `-e TZ=Etc/UTC` | specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List). | | `-e TZ=Europe/London` | Specify a timezone to use EG Europe/London |
| `-e PASSWORD=password` | Optional web gui password, if `PASSWORD` or `HASHED_PASSWORD` is not provided, there will be no auth. | | `-e PASSWORD=password` | Optional web gui password, if `PASSWORD` or `HASHED_PASSWORD` is not provided, there will be no auth. |
| `-e HASHED_PASSWORD=` | Optional web gui password, overrides `PASSWORD`, instructions on how to create it is below. | | `-e HASHED_PASSWORD=` | Optional web gui password, overrides `PASSWORD`, instructions on how to create it is below. |
| `-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/coder/code-server/blob/main/docs/guide.md#using-a-subdomain) | | `-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)
@ -155,10 +158,10 @@ You can set any environment variable from a file by using a special prepend `FIL
As an example: As an example:
```bash ```bash
-e FILE__MYVAR=/run/secrets/mysecretvariable -e FILE__PASSWORD=/run/secrets/mysecretpassword
``` ```
Will set the environment variable `MYVAR` based on the contents of the `/run/secrets/mysecretvariable` file. Will set the environment variable `PASSWORD` based on the contents of the `/run/secrets/mysecretpassword` file.
## Umask for running applications ## Umask for running applications
@ -167,20 +170,15 @@ Keep in mind umask is not chmod it subtracts from permissions based on it's valu
## User / Group Identifiers ## User / Group Identifiers
When using volumes (`-v` flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user `PUID` and group `PGID`. When using volumes (`-v` flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user `PUID` and group `PGID`.
Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic. Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.
In this instance `PUID=1000` and `PGID=1000`, to find yours use `id your_user` as below: In this instance `PUID=1000` and `PGID=1000`, to find yours use `id user` as below:
```bash ```bash
id your_user $ id username
``` uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
Example output:
```text
uid=1000(your_user) gid=1000(your_user) groups=1000(your_user)
``` ```
## Docker Mods ## Docker Mods
@ -191,101 +189,53 @@ We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to
## Support Info ## Support Info
* Shell access whilst the container is running: * Shell access whilst the container is running: `docker exec -it code-server /bin/bash`
* To monitor the logs of the container in realtime: `docker logs -f code-server`
```bash * container version number
docker exec -it code-server /bin/bash * `docker inspect -f '{{ index .Config.Labels "build_version" }}' code-server`
``` * image version number
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' ghcr.io/linuxserver/code-server`
* To monitor the logs of the container in realtime:
```bash
docker logs -f code-server
```
* Container version number:
```bash
docker inspect -f '{{ index .Config.Labels "build_version" }}' code-server
```
* Image version number:
```bash
docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/code-server:latest
```
## Updating Info ## Updating Info
Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (noted in the relevant readme.md), we do not recommend or support updating apps inside the container. Please consult the [Application Setup](#application-setup) section above to see if it is recommended for the image. Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (ie. nextcloud, plex), we do not recommend or support updating apps inside the container. Please consult the [Application Setup](#application-setup) section above to see if it is recommended for the image.
Below are the instructions for updating containers: Below are the instructions for updating containers:
### Via Docker Compose ### Via Docker Compose
* Update images: * Update all images: `docker-compose pull`
* All images: * or update a single image: `docker-compose pull code-server`
* Let compose update all containers as necessary: `docker-compose up -d`
```bash * or update a single container: `docker-compose up -d code-server`
docker-compose pull * You can also remove the old dangling images: `docker image prune`
```
* Single image:
```bash
docker-compose pull code-server
```
* Update containers:
* All containers:
```bash
docker-compose up -d
```
* Single container:
```bash
docker-compose up -d code-server
```
* You can also remove the old dangling images:
```bash
docker image prune
```
### Via Docker Run ### Via Docker Run
* Update the image: * Update the image: `docker pull ghcr.io/linuxserver/code-server`
* Stop the running container: `docker stop code-server`
```bash * Delete the container: `docker rm code-server`
docker pull lscr.io/linuxserver/code-server:latest
```
* Stop the running container:
```bash
docker stop code-server
```
* Delete the container:
```bash
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)
* You can also remove the old dangling images: * You can also remove the old dangling images: `docker image prune`
### Via Watchtower auto-updater (only use if you don't remember the original parameters)
* Pull the latest image at its tag and replace it with the same env variables in one run:
```bash ```bash
docker image prune docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once code-server
``` ```
* You can also remove the old dangling images: `docker image prune`
**Note:** We do not endorse the use of Watchtower as a solution to automated updates of existing Docker containers. In fact we generally discourage automated updates. However, this is a useful tool for one-time manual updates of containers where you have forgotten the original parameters. In the long term, we highly recommend using [Docker Compose](https://docs.linuxserver.io/general/docker-compose).
### Image Update Notifications - Diun (Docker Image Update Notifier) ### Image Update Notifications - Diun (Docker Image Update Notifier)
>[!TIP] * We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
>We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
## Building locally ## Building locally
@ -297,31 +247,19 @@ cd docker-code-server
docker build \ docker build \
--no-cache \ --no-cache \
--pull \ --pull \
-t lscr.io/linuxserver/code-server:latest . -t ghcr.io/linuxserver/code-server:latest .
``` ```
The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static` The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
```bash ```bash
docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset docker run --rm --privileged multiarch/qemu-user-static:register --reset
``` ```
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`. Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.
## Versions ## Versions
* **13.10.24:** - Only chown config folder when change to ownership or new install is detected.
* **09.10.24:** - Manage permissions in /config/.ssh according to file type
* **19.08.24:** - Rebase to Ubuntu Noble.
* **01.07.23:** - Deprecate armhf. As announced [here](https://www.linuxserver.io/blog/a-farewell-to-arm-hf)
* **05.10.22:** - Install recommended deps to maintain parity with the older images.
* **29.09.22:** - Rebase to jammy, switch to s6v3. Fix chown logic to skip `/config/workspace` contents.
* **20.02.22:** - Install using the official tarballs.
* **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
* **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

@ -3,7 +3,7 @@
# 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: master
@ -22,6 +22,6 @@ repo_vars:
- CI_PORT='8443' - CI_PORT='8443'
- CI_SSL='false' - CI_SSL='false'
- CI_DELAY='120' - CI_DELAY='120'
- CI_DOCKERENV='' - CI_DOCKERENV='TZ=US/Pacific'
- CI_AUTH='' - CI_AUTH='user:password'
- CI_WEBPATH='' - CI_WEBPATH=''

View File

@ -1,573 +1,185 @@
NAME VERSION TYPE adduser3.116ubuntu1
@babel/runtime 7.27.0 npm apt1.6.13
@c4312/eventsource-umd 3.0.5 npm apt-utils1.6.13
@coder/logger 3.0.1 npm base-files10.1ubuntu2.10
@mapbox/node-pre-gyp 1.0.11 npm base-passwd3.5.44
@microsoft/1ds-core-js 3.2.13 npm bash4.4.18-2ubuntu1.2
@microsoft/1ds-post-js 3.2.13 npm bsdutils1:2.31.1-0.4ubuntu3.7
@microsoft/applicationinsights-core-js 2.8.15 npm bzip21.0.6-8.1ubuntu0.2
@microsoft/applicationinsights-shims 2.0.2 npm ca-certificates20210119~18.04.1
@microsoft/dynamicproto-js 1.1.9 npm coreutils8.28-1ubuntu1
@parcel/watcher 2.5.1 npm curl7.58.0-2ubuntu3.13
@parcel/watcher-linux-x64-glibc 2.5.1 npm dash0.5.8-2.10
@parcel/watcher-linux-x64-musl 2.5.1 npm debconf1.5.66ubuntu1
@phc/format 1.0.0 npm debianutils4.8.4
@tootallnate/once 3.0.0 npm diffutils1:3.6-1
@tootallnate/quickjs-emscripten 0.23.0 npm dirmngr2.2.4-1ubuntu1.4
@vscode/deviceid 0.1.1 npm dpkg1.19.0.5ubuntu2.3
@vscode/iconv-lite-umd 0.7.0 npm e2fsprogs1.44.1-1ubuntu1.3
@vscode/proxy-agent 0.32.0 npm fdisk2.31.1-0.4ubuntu3.7
@vscode/ripgrep 1.15.11 npm file1:5.32-2ubuntu0.4
@vscode/spdlog 0.15.1 npm findutils4.6.0+git+20170828-2
@vscode/tree-sitter-wasm 0.1.4 npm gcc-8-base8.4.0-1ubuntu1~18.04
@vscode/vscode-languagedetection 1.0.21 npm git1:2.17.1-1ubuntu0.8
@vscode/windows-process-tree 0.6.0 npm git-man1:2.17.1-1ubuntu0.8
@vscode/windows-registry 1.1.0 npm gnupg2.2.4-1ubuntu1.4
@xterm/addon-clipboard 0.2.0-beta.82 npm gnupg-l10n2.2.4-1ubuntu1.4
@xterm/addon-image 0.9.0-beta.99 npm gnupg-utils2.2.4-1ubuntu1.4
@xterm/addon-ligatures 0.10.0-beta.99 npm gpg2.2.4-1ubuntu1.4
@xterm/addon-progress 0.2.0-beta.5 npm gpg-agent2.2.4-1ubuntu1.4
@xterm/addon-search 0.16.0-beta.99 npm gpgconf2.2.4-1ubuntu1.4
@xterm/addon-serialize 0.14.0-beta.99 npm gpgsm2.2.4-1ubuntu1.4
@xterm/addon-unicode11 0.9.0-beta.99 npm gpgv2.2.4-1ubuntu1.4
@xterm/addon-webgl 0.19.0-beta.99 npm gpg-wks-client2.2.4-1ubuntu1.4
@xterm/headless 5.6.0-beta.99 npm gpg-wks-server2.2.4-1ubuntu1.4
@xterm/xterm 5.6.0-beta.99 npm grep3.1-2build1
abbrev 1.1.1 npm gzip1.6-5ubuntu1
accepts 2.0.0 npm hostname3.20
adduser 3.137ubuntu1 deb init-system-helpers1.51
agent-base 6.0.2 npm jq1.5+dfsg-2
agent-base 7.1.1 npm krb5-locales1.16-2ubuntu0.2
agent-base 7.1.3 npm (+3 duplicates) less487-0.1
ansi-regex 5.0.1 npm libacl12.2.52-3build1
aproba 2.0.0 npm libapt-inst2.01.6.13
apt 2.7.14build2 deb libapt-pkg5.01.6.13
apt-utils 2.7.14build2 deb libasn1-8-heimdal7.5.0+dfsg-1
are-we-there-yet 2.0.0 npm libassuan02.5.1-2
argon2 0.31.2 npm libattr11:2.4.47-2build1
argparse 2.0.1 npm libaudit11:2.8.2-1ubuntu1.1
ast-types 0.13.4 npm libaudit-common1:2.8.2-1ubuntu1.1
balanced-match 1.0.2 npm libblkid12.31.1-0.4ubuntu3.7
base-files 13ubuntu10.2 deb libbsd00.8.7-1ubuntu0.1
base-passwd 3.6.3build1 deb libbz2-1.01.0.6-8.1ubuntu0.2
base64-js 1.5.1 npm libc62.27-3ubuntu1.4
bash 5.2.21-2ubuntu4 deb libcap-ng00.7.7-3.1
basic-ftp 5.0.5 npm libc-bin2.27-3ubuntu1.4
bat 1.0.0 npm libcom-err21.44.1-1ubuntu1.3
beep-boop 1.2.3 npm libcurl3-gnutls7.58.0-2ubuntu3.13
bindings 1.5.0 npm libcurl47.58.0-2ubuntu3.13
bl 4.1.0 npm libdb5.35.3.28-13.1ubuntu1.1
body-parser 2.1.0 npm libdebconfclient00.213ubuntu1
brace-expansion 1.1.11 npm libedit23.1-20170329-1
braces 3.0.3 npm liberror-perl0.17025-1
bsdutils 1:2.39.3-9ubuntu6.2 deb libexpat12.2.5-3ubuntu0.2
buffer 5.7.1 npm libext2fs21.44.1-1ubuntu1.3
buffer-alloc 1.2.0 npm libfdisk12.31.1-0.4ubuntu3.7
buffer-alloc-unsafe 1.1.0 npm libffi63.2.1-8
buffer-crc32 0.2.13 npm libgcc11:8.4.0-1ubuntu1~18.04
buffer-fill 1.0.0 npm libgcrypt201.8.1-4ubuntu1.2
builtin-notebook-renderers 1.0.0 npm libgdbm51.14.1-6
bytes 3.1.2 npm libgdbm-compat41.14.1-6
ca-certificates 20240203 deb libgmp102:6.1.2+dfsg-2
call-bind-apply-helpers 1.0.2 npm libgnutls303.5.18-1ubuntu1.4
call-bound 1.0.4 npm libgpg-error01.27-6
catatonit 0.1.7-1 deb libgssapi3-heimdal7.5.0+dfsg-1
charenc 0.0.2 npm libgssapi-krb5-21.16-2ubuntu0.2
chownr 1.1.4 npm libhcrypto4-heimdal7.5.0+dfsg-1
chownr 2.0.0 npm libheimbase1-heimdal7.5.0+dfsg-1
clojure 1.0.0 npm libheimntlm0-heimdal7.5.0+dfsg-1
code-server 1.99.3 npm libhogweed43.4.1-0ubuntu0.18.04.1
code-server 4.99.3 npm libhx509-5-heimdal7.5.0+dfsg-1
coffeescript 1.0.0 npm libidn2-02.0.4-1.1ubuntu0.2
color-support 1.1.3 npm libjq11.5+dfsg-2
compressible 2.0.18 npm libk5crypto31.16-2ubuntu0.2
compression 1.8.0 npm libkeyutils11.5.9-9.2ubuntu2
concat-map 0.0.1 npm libkrb5-26-heimdal7.5.0+dfsg-1
configuration-editing 1.0.0 npm libkrb5-31.16-2ubuntu0.2
console-control-strings 1.1.0 npm libkrb5support01.16-2ubuntu0.2
content-disposition 1.0.0 npm libksba81.3.5-2
content-type 1.0.5 npm libldap-2.4-22.4.45+dfsg-1ubuntu1.10
cookie 0.7.1 npm libldap-common2.4.45+dfsg-1ubuntu1.10
cookie 0.7.2 npm (+1 duplicate) liblz4-10.0~r131-2ubuntu3.1
cookie-parser 1.4.7 npm liblzma55.2.2-1.3
cookie-signature 1.0.6 npm libmagic11:5.32-2ubuntu0.4
cookie-signature 1.2.2 npm libmagic-mgc1:5.32-2ubuntu0.4
coreutils 9.4-3ubuntu6 deb libmount12.31.1-0.4ubuntu3.7
cpp 1.0.0 npm libncurses56.1-1ubuntu1.18.04
cron 3.0pl1-184ubuntu2 deb libncursesw56.1-1ubuntu1.18.04
cron-daemon-common 3.0pl1-184ubuntu2 deb libnettle63.4.1-0ubuntu0.18.04.1
crypt 0.0.2 npm libnghttp2-141.30.0-1ubuntu1
csharp 1.0.0 npm libnpth01.5-3
css 1.0.0 npm libonig46.7.0-1
css-language-features 1.0.0 npm libp11-kit00.23.9-2ubuntu0.1
curl 8.5.0-2ubuntu10.6 deb libpam0g1.1.8-3.6ubuntu2.18.04.3
dart 1.0.0 npm libpam-modules1.1.8-3.6ubuntu2.18.04.3
dash 0.5.12-6ubuntu5 deb libpam-modules-bin1.1.8-3.6ubuntu2.18.04.3
data-uri-to-buffer 6.0.2 npm libpam-runtime1.1.8-3.6ubuntu2.18.04.3
debconf 1.5.86ubuntu1 deb libpcre32:8.39-9
debianutils 5.17build1 deb libperl5.265.26.1-6ubuntu0.5
debug 2.6.9 npm libprocps62:3.3.12-3ubuntu1.2
debug 4.3.4 npm libpsl50.19.1-5build1
debug 4.3.6 npm libpython2.7-minimal2.7.17-1~18.04ubuntu1.6
debug 4.4.0 npm libpython2.7-stdlib2.7.17-1~18.04ubuntu1.6
debug-auto-launch 1.0.0 npm libpython-stdlib2.7.15~rc1-1
debug-server-ready 1.0.0 npm libreadline77.0-3
decompress-response 6.0.0 npm libroken18-heimdal7.5.0+dfsg-1
deep-extend 0.6.0 npm librtmp12.4+20151223.gitfa8646d.1-1
degenerator 5.0.1 npm libsasl2-22.1.27~101-g0780600+dfsg-3ubuntu2.3
delegates 1.0.0 npm libsasl2-modules2.1.27~101-g0780600+dfsg-3ubuntu2.3
depd 2.0.0 npm libsasl2-modules-db2.1.27~101-g0780600+dfsg-3ubuntu2.3
destroy 1.2.0 npm libseccomp22.5.1-1ubuntu1~18.04.1
detect-libc 1.0.3 npm libselinux12.7-2build2
detect-libc 2.0.1 npm libsemanage12.7-2build2
detect-libc 2.0.3 npm libsemanage-common2.7-2build2
diff 1.0.0 npm libsepol12.7-1
diffutils 1:3.10-1build1 deb libsmartcols12.31.1-0.4ubuntu3.7
dirmngr 2.4.4-2ubuntu17.2 deb libsqlite3-03.22.0-1ubuntu0.4
docker 1.0.0 npm libss21.44.1-1ubuntu1.3
dpkg 1.22.6ubuntu6.1 deb libssl1.0.01.0.2n-1ubuntu5.6
dunder-proto 1.0.1 npm libssl1.11.1.1-1ubuntu2.1~18.04.9
e2fsprogs 1.47.0-2.4~exp1ubuntu4.1 deb libstdc++68.4.0-1ubuntu1~18.04
ee-first 1.1.1 npm libsystemd0237-3ubuntu10.48
emmet 1.0.0 npm libtasn1-64.13-2
emoji-regex 8.0.0 npm libtinfo56.1-1ubuntu1.18.04
encodeurl 2.0.0 npm libudev1237-3ubuntu10.48
end-of-stream 1.4.4 npm libunistring20.9.9-0ubuntu2
env-paths 2.2.1 npm libuuid12.31.1-0.4ubuntu3.7
es-define-property 1.0.1 npm libwind0-heimdal7.5.0+dfsg-1
es-errors 1.3.0 npm libx11-62:1.6.4-3ubuntu0.4
es-object-atoms 1.1.1 npm libx11-data2:1.6.4-3ubuntu0.4
es6-promisify 7.0.0 npm libxau61:1.0.8-1ubuntu1
escape-html 1.0.3 npm libxcb11.13-2~ubuntu18.04
escodegen 2.1.0 npm libxdmcp61:1.1.2-3
esprima 4.0.1 npm libxext62:1.3.3-1
estraverse 5.3.0 npm libxmuu12:1.1.2-2
esutils 2.0.3 npm libzstd11.3.3+dfsg-2ubuntu1.2
etag 1.8.1 npm locales2.27-3ubuntu1.4
eventemitter3 4.0.7 npm login1:4.5-1ubuntu2
eventsource-parser 3.0.0 npm lsb-base9.20170808ubuntu1
expand-template 2.0.3 npm mawk1.3.3-17ubuntu3
express 5.0.1 npm mime-support3.60ubuntu1
extension-editing 1.0.0 npm mount2.31.1-0.4ubuntu3.7
fd-slicer 1.1.0 npm multiarch-support2.27-3ubuntu1.4
file-uri-to-path 1.0.0 npm nano2.9.3-2
fill-range 7.1.1 npm ncurses-base6.1-1ubuntu1.18.04
finalhandler 2.1.0 npm ncurses-bin6.1-1ubuntu1.18.04
findutils 4.9.0-5build1 deb netbase5.4
follow-redirects 1.15.9 npm net-tools1.60+git20161116.90da8a0-1ubuntu1
font-finder 1.1.0 npm nodejs12.22.2-1nodesource1
font-ligatures 1.4.1 npm openssh-client1:7.6p1-4ubuntu0.3
forwarded 0.2.0 npm openssl1.1.1-1ubuntu2.1~18.04.9
fresh 0.5.2 npm passwd1:4.5-1ubuntu2
fresh 2.0.0 npm patch2.7.6-2ubuntu1.1
fs-constants 1.0.0 npm perl5.26.1-6ubuntu0.5
fs-extra 11.2.0 npm perl-base5.26.1-6ubuntu0.5
fs-minipass 2.1.0 npm perl-modules-5.265.26.1-6ubuntu0.5
fs.realpath 1.0.0 npm pinentry-curses1.1.0-1
fsharp 1.0.0 npm procps2:3.3.12-3ubuntu1.2
function-bind 1.1.2 npm publicsuffix20180223.1310-1
gauge 3.0.2 npm python2.7.15~rc1-1
gcc-14-base 14.2.0-4ubuntu2~24.04 deb python2.72.7.17-1~18.04ubuntu1.6
get-intrinsic 1.3.0 npm python2.7-minimal2.7.17-1~18.04ubuntu1.6
get-proto 1.0.1 npm python-minimal2.7.15~rc1-1
get-system-fonts 2.0.2 npm readline-common7.0-3
get-uri 6.0.4 npm sed4.4-2
git 1.0.0 npm sensible-utils0.0.12
git 1:2.43.0-1ubuntu7.2 deb sudo1.8.21p2-3ubuntu1.4
git-base 1.0.0 npm sysvinit-utils2.88dsf-59.10ubuntu1
git-man 1:2.43.0-1ubuntu7.2 deb tar1.29b-2ubuntu0.2
github 0.0.1 npm tzdata2021a-0ubuntu0.18.04
github-authentication 0.0.2 npm ubuntu-keyring2018.09.18.1~18.04.2
github-from-package 0.0.0 npm util-linux2.31.1-0.4ubuntu3.7
glob 7.2.3 npm xauth1:1.0.10-1
gnupg 2.4.4-2ubuntu17.2 deb xz-utils5.2.2-1.3
gnupg-l10n 2.4.4-2ubuntu17.2 deb yarn1.22.5-1
gnupg-utils 2.4.4-2ubuntu17.2 deb zlib1g1:1.2.11.dfsg-0ubuntu2
go 1.0.0 npm
gopd 1.2.0 npm
gpg 2.4.4-2ubuntu17.2 deb
gpg-agent 2.4.4-2ubuntu17.2 deb
gpg-wks-client 2.4.4-2ubuntu17.2 deb
gpgconf 2.4.4-2ubuntu17.2 deb
gpgsm 2.4.4-2ubuntu17.2 deb
gpgv 2.4.4-2ubuntu17.2 deb
graceful-fs 4.2.11 npm
grep 3.11-4build1 deb
groovy 1.0.0 npm
grunt 1.0.0 npm
gulp 1.0.0 npm
gzip 1.12-1ubuntu3 deb
handlebars 1.0.0 npm
has-symbols 1.1.0 npm
has-unicode 2.0.1 npm
hasown 2.0.2 npm
hlsl 1.0.0 npm
hostname 3.23+nmu2ubuntu2 deb
html 1.0.0 npm
html-language-features 1.0.0 npm
http-errors 2.0.0 npm
http-proxy 1.18.1 npm
http-proxy-agent 7.0.0 npm
http-proxy-agent 7.0.2 npm
httpolyglot 0.1.2 npm
https-proxy-agent 5.0.1 npm
https-proxy-agent 7.0.2 npm
https-proxy-agent 7.0.6 npm (+1 duplicate)
i18next 23.16.4 npm
iconv-lite 0.5.2 npm
iconv-lite 0.6.3 npm
ieee754 1.2.1 npm
inflight 1.0.6 npm
inherits 2.0.4 npm (+1 duplicate)
ini 1.0.0 npm
ini 1.3.8 npm
init-system-helpers 1.66ubuntu1 deb
ip-address 9.0.5 npm (+1 duplicate)
ipaddr.js 1.9.1 npm
ipynb 1.0.0 npm
is-buffer 1.1.6 npm
is-extglob 2.1.1 npm
is-fullwidth-code-point 3.0.0 npm
is-glob 4.0.3 npm
is-number 7.0.0 npm
is-promise 4.0.0 npm
isexe 2.0.0 npm
jake 1.0.0 npm
java 1.0.0 npm
javascript 1.0.0 npm
jq 1.7.1-3build1 deb
js-base64 3.7.7 npm
js-debug 1.97.1 npm
js-debug-companion 1.1.3 npm
js-yaml 4.1.0 npm
jsbn 1.1.0 npm (+1 duplicate)
jschardet 3.1.4 npm
json 1.0.0 npm
json-language-features 1.0.0 npm
jsonfile 6.1.0 npm
julia 1.0.0 npm
just-performance 4.3.0 npm
kerberos 2.1.1 npm
keyboxd 2.4.4-2ubuntu17.2 deb
krb5-locales 1.20.1-6ubuntu2.5 deb
latex 1.0.0 npm
less 1.0.0 npm
less 590-2ubuntu2.1 deb
libacl1 2.3.2-1build1.1 deb
libapparmor1 4.0.1really4.0.1-0ubuntu0.24.04.3 deb
libapt-pkg6.0t64 2.7.14build2 deb
libassuan0 2.5.6-1build1 deb
libatomic1 14.2.0-4ubuntu2~24.04 deb
libattr1 1:2.5.2-1build1.1 deb
libaudit-common 1:3.1.2-2.1build1.1 deb
libaudit1 1:3.1.2-2.1build1.1 deb
libblkid1 2.39.3-9ubuntu6.2 deb
libbrotli1 1.1.0-2build2 deb
libbsd0 0.12.1-1build1.1 deb
libbz2-1.0 1.0.8-5.1build0.1 deb
libc-bin 2.39-0ubuntu8.4 deb
libc6 2.39-0ubuntu8.4 deb
libcap-ng0 0.8.4-2build2 deb
libcap2 1:2.66-5ubuntu2.2 deb
libcbor0.10 0.10.2-1.2ubuntu2 deb
libcom-err2 1.47.0-2.4~exp1ubuntu4.1 deb
libcrypt1 1:4.4.36-4build1 deb
libcurl3t64-gnutls 8.5.0-2ubuntu10.6 deb
libcurl4t64 8.5.0-2ubuntu10.6 deb
libdb5.3t64 5.3.28+dfsg2-7 deb
libdebconfclient0 0.271ubuntu3 deb
libedit2 3.1-20230828-1build1 deb
liberror-perl 0.17029-2 deb
libexpat1 2.6.1-2ubuntu0.3 deb
libext2fs2t64 1.47.0-2.4~exp1ubuntu4.1 deb
libffi8 3.4.6-1build1 deb
libfido2-1 1.14.0-1build3 deb
libgcc-s1 14.2.0-4ubuntu2~24.04 deb
libgcrypt20 1.10.3-2build1 deb
libgdbm-compat4t64 1.23-5.1build1 deb
libgdbm6t64 1.23-5.1build1 deb
libgmp10 2:6.3.0+dfsg-2ubuntu6.1 deb
libgnutls30t64 3.8.3-1.1ubuntu3.3 deb
libgpg-error0 1.47-3build2.1 deb
libgssapi-krb5-2 1.20.1-6ubuntu2.5 deb
libhogweed6t64 3.9.1-2.2build1.1 deb
libidn2-0 2.3.7-2build1.1 deb
libjq1 1.7.1-3build1 deb
libk5crypto3 1.20.1-6ubuntu2.5 deb
libkeyutils1 1.6.3-3build1 deb
libkrb5-3 1.20.1-6ubuntu2.5 deb
libkrb5support0 1.20.1-6ubuntu2.5 deb
libksba8 1.6.6-1build1 deb
libldap-common 2.6.7+dfsg-1~exp1ubuntu8.2 deb
libldap2 2.6.7+dfsg-1~exp1ubuntu8.2 deb
liblz4-1 1.9.4-1build1.1 deb
liblzma5 5.6.1+really5.4.5-1ubuntu0.2 deb
libmd0 1.1.0-2build1.1 deb
libmount1 2.39.3-9ubuntu6.2 deb
libncursesw6 6.4+20240113-1ubuntu2 deb
libnettle8t64 3.9.1-2.2build1.1 deb
libnghttp2-14 1.59.0-1ubuntu0.2 deb
libnpth0t64 1.6-3.1build1 deb
libonig5 6.9.9-1build1 deb
libp11-kit0 0.25.3-4ubuntu2.1 deb
libpam-modules 1.5.3-5ubuntu5.1 deb
libpam-modules-bin 1.5.3-5ubuntu5.1 deb
libpam-runtime 1.5.3-5ubuntu5.1 deb
libpam0g 1.5.3-5ubuntu5.1 deb
libpcre2-8-0 10.42-4ubuntu2.1 deb
libperl5.38t64 5.38.2-3.2ubuntu0.1 deb
libproc2-0 2:4.0.4-4ubuntu3.2 deb
libpsl5t64 0.21.2-1.1build1 deb
libreadline8t64 8.2-4build1 deb
librtmp1 2.4+20151223.gitfa8646d.1-2build7 deb
libsasl2-2 2.1.28+dfsg1-5ubuntu3.1 deb
libsasl2-modules 2.1.28+dfsg1-5ubuntu3.1 deb
libsasl2-modules-db 2.1.28+dfsg1-5ubuntu3.1 deb
libseccomp2 2.5.5-1ubuntu3.1 deb
libselinux1 3.5-2ubuntu2.1 deb
libsemanage-common 3.5-1build5 deb
libsemanage2 3.5-1build5 deb
libsepol2 3.5-2build1 deb
libsmartcols1 2.39.3-9ubuntu6.2 deb
libsqlite3-0 3.45.1-1ubuntu2.1 deb
libss2 1.47.0-2.4~exp1ubuntu4.1 deb
libssh-4 0.10.6-2build2 deb
libssl3t64 3.0.13-0ubuntu3.5 deb
libstdc++6 14.2.0-4ubuntu2~24.04 deb
libsystemd0 255.4-1ubuntu8.6 deb
libtasn1-6 4.19.0-3ubuntu0.24.04.1 deb
libtinfo6 6.4+20240113-1ubuntu2 deb
libudev1 255.4-1ubuntu8.6 deb
libunistring5 1.1-2build1.1 deb
libuuid1 2.39.3-9ubuntu6.2 deb
libx11-6 2:1.8.7-1build1 deb
libx11-data 2:1.8.7-1build1 deb
libxau6 1:1.0.9-1build6 deb
libxcb1 1.15-1ubuntu2 deb
libxdmcp6 1:1.1.3-0ubuntu6 deb
libxext6 2:1.3.4-1build2 deb
libxmuu1 2:1.1.3-3build2 deb
libxxhash0 0.8.2-2build1 deb
libzstd1 1.5.5+dfsg2-2build1.1 deb
limiter 2.1.0 npm
locales 2.39-0ubuntu8.4 deb
log 1.0.0 npm
login 1:4.13+dfsg1-4ubuntu3.2 deb
logsave 1.47.0-2.4~exp1ubuntu4.1 deb
lru-cache 6.0.0 npm
lru-cache 7.18.3 npm
lua 1.0.0 npm
make 1.0.0 npm
make-dir 3.1.0 npm
markdown 1.0.0 npm
markdown-language-features 1.0.0 npm
markdown-math 1.0.0 npm
math-intrinsics 1.1.0 npm
mawk 1.3.4.20240123-1build1 deb
md5 2.3.0 npm
media-preview 1.0.0 npm
media-typer 1.1.0 npm
merge-conflict 1.0.0 npm
merge-descriptors 2.0.0 npm
methods 1.1.2 npm
micromatch 4.0.8 npm
microsoft-authentication 0.0.1 npm
mime-db 1.52.0 npm
mime-db 1.53.0 npm
mime-types 2.1.35 npm
mime-types 3.0.0 npm
mimic-response 3.1.0 npm
minimatch 3.1.2 npm
minimist 1.2.6 npm
minipass 3.3.6 npm (+1 duplicate)
minipass 5.0.0 npm
minizlib 2.1.2 npm
mkdirp 1.0.4 npm (+1 duplicate)
mkdirp-classic 0.5.3 npm
mount 2.39.3-9ubuntu6.2 deb
ms 2.0.0 npm
ms 2.1.2 npm (+1 duplicate)
ms 2.1.3 npm
nano 7.2-2ubuntu0.1 deb
napi-build-utils 1.0.2 npm
native-watchdog 1.4.2 npm
ncurses-base 6.4+20240113-1ubuntu2 deb
ncurses-bin 6.4+20240113-1ubuntu2 deb
negotiator 0.6.4 npm
negotiator 1.0.0 npm
net-tools 2.10-0.1ubuntu4 deb
netbase 6.4 deb
netcat-openbsd 1.226-1ubuntu2 deb
netmask 2.0.2 npm
node 20.18.3 binary
node-abi 3.8.0 npm
node-addon-api 7.1.0 npm
node-addon-api 7.1.1 npm
node-fetch 2.7.0 npm
node-pty 1.1.0-beta33 npm
nopt 5.0.0 npm
npm 1.0.1 npm
npmlog 5.0.1 npm
nw-pre-gyp-module-test 0.0.1 npm
object-assign 4.1.1 npm
object-inspect 1.13.4 npm
objective-c 1.0.0 npm
on-finished 2.4.1 npm
on-headers 1.0.2 npm
once 1.4.0 npm (+1 duplicate)
openssh-client 1:9.6p1-3ubuntu13.9 deb
openssl 3.0.13-0ubuntu3.5 deb
opentype.js 0.8.0 npm
os-tmpdir 1.0.2 npm
pac-proxy-agent 7.2.0 npm
pac-resolver 7.0.1 npm
parseurl 1.3.3 npm
passwd 1:4.13+dfsg1-4ubuntu3.2 deb
patch 2.7.6-7build3 deb
path-is-absolute 1.0.1 npm
path-to-regexp 8.2.0 npm
pem 1.14.8 npm
pend 1.2.0 npm
perl 1.0.0 npm
perl 5.38.2-3.2ubuntu0.1 deb
perl-base 5.38.2-3.2ubuntu0.1 deb
perl-modules-5.38 5.38.2-3.2ubuntu0.1 deb
php 1.0.0 npm
php-language-features 1.0.0 npm
picomatch 2.3.1 npm
pinentry-curses 1.2.1-3ubuntu5 deb
powershell 1.0.0 npm
prebuild-install 7.1.2 npm
procps 2:4.0.4-4ubuntu3.2 deb
promise-stream-reader 1.0.1 npm
proxy-addr 2.0.7 npm
proxy-agent 6.5.0 npm
proxy-from-env 1.1.0 npm (+1 duplicate)
publicsuffix 20231001.0357-0.1 deb
pug 1.0.0 npm
pump 3.0.0 npm
python 1.0.0 npm
qs 6.13.0 npm
qs 6.14.0 npm
r 1.0.0 npm
range-parser 1.2.1 npm
raw-body 3.0.0 npm
razor 1.0.0 npm
rc 1.2.8 npm
readable-stream 3.6.0 npm
readable-stream 3.6.2 npm
readline-common 8.2-4build1 deb
references-view 1.0.0 npm
regenerator-runtime 0.14.1 npm
requires-port 1.0.0 npm
restructuredtext 1.0.0 npm
rimraf 3.0.2 npm
rotating-file-stream 3.2.5 npm
router 2.1.0 npm
ruby 1.0.0 npm
rust 1.0.0 npm
safe-buffer 5.2.1 npm (+1 duplicate)
safe-compare 1.1.4 npm
safer-buffer 2.1.2 npm
scss 1.0.0 npm
search-result 1.0.0 npm
sed 4.9-2build1 deb
semver 6.3.1 npm
semver 7.5.4 npm
semver 7.7.1 npm
send 1.1.0 npm
sensible-utils 0.0.22 deb
serve-static 2.1.0 npm
set-blocking 2.0.0 npm
setprototypeof 1.2.0 npm
shaderlab 1.0.0 npm
shellscript 1.0.0 npm
side-channel 1.1.0 npm
side-channel-list 1.0.0 npm
side-channel-map 1.0.1 npm
side-channel-weakmap 1.0.2 npm
signal-exit 3.0.7 npm
simple-browser 1.0.0 npm
simple-concat 1.0.1 npm
simple-get 4.0.1 npm
smart-buffer 4.2.0 npm (+1 duplicate)
socks 2.8.3 npm
socks 2.8.4 npm
socks-proxy-agent 8.0.4 npm
socks-proxy-agent 8.0.5 npm
source-map 0.6.1 npm
sprintf-js 1.1.3 npm (+1 duplicate)
sql 1.0.0 npm
statuses 2.0.1 npm
string-width 4.2.3 npm
string_decoder 1.3.0 npm (+1 duplicate)
strip-ansi 6.0.1 npm
strip-json-comments 2.0.1 npm
sudo 1.9.15p5-3ubuntu5 deb
swift 1.0.0 npm
systemd-standalone-sysusers 255.4-1ubuntu8.6 deb
sysvinit-utils 3.08-6ubuntu3 deb
tar 1.35+dfsg-3build1 deb
tar 6.2.1 npm
tar-fs 2.1.1 npm
tar-stream 2.2.0 npm
tas-client-umd 0.2.0 npm
terminal-suggest 1.0.1 npm
theme-abyss 1.0.0 npm
theme-defaults 1.0.0 npm
theme-kimbie-dark 1.0.0 npm
theme-monokai 1.0.0 npm
theme-monokai-dimmed 1.0.0 npm
theme-quietlight 1.0.0 npm
theme-red 1.0.0 npm
theme-solarized-dark 1.0.0 npm
theme-solarized-light 1.0.0 npm
theme-tomorrow-night-blue 1.0.0 npm
tiny-inflate 1.0.3 npm
to-regex-range 5.0.1 npm
toidentifier 1.0.1 npm
tr46 0.0.3 npm
tslib 2.7.0 npm
tslib 2.8.1 npm
tunnel-agent 0.6.0 npm
tunnel-forwarding 1.0.0 npm
type-is 2.0.0 npm
typescript 1.0.0 npm
typescript 5.8.2 npm
typescript-language-features 1.0.0 npm
tzdata 2025b-0ubuntu0.24.04 deb
ubuntu-keyring 2023.11.28.1 deb
undici 7.3.0 npm
universalify 2.0.1 npm
unminimize 0.2.1 deb
unpipe 1.0.0 npm
util-deprecate 1.0.2 npm (+1 duplicate)
util-linux 2.39.3-9ubuntu6.2 deb
utils-merge 1.0.1 npm
uuid 9.0.1 npm
vary 1.1.2 npm
vb 1.0.0 npm
vscode-css-languageserver 1.0.0 npm
vscode-extensions 0.0.1 npm
vscode-html-languageserver 1.0.0 npm
vscode-js-profile-table 1.0.10 npm
vscode-json-languageserver 1.3.4 npm
vscode-oniguruma 1.7.0 npm
vscode-regexpp 3.1.0 npm
vscode-textmate 9.2.0 npm
vscode-theme-seti 1.0.0 npm
webidl-conversions 3.0.1 npm
whatwg-url 5.0.0 npm
which 2.0.2 npm
wide-align 1.1.5 npm
wrappy 1.0.2 npm (+1 duplicate)
ws 8.18.0 npm
xauth 1:1.1.2-1build1 deb
xdg-basedir 4.0.0 npm
xml 1.0.0 npm
yallist 4.0.0 npm (+1 duplicate)
yaml 1.0.0 npm
yauzl 2.10.0 npm
yauzl 3.1.1 npm
yazl 2.4.3 npm
zlib1g 1:1.3.dfsg-3.1ubuntu2.1 deb

View File

@ -4,29 +4,46 @@
project_name: code-server project_name: code-server
project_url: "https://coder.com" project_url: "https://coder.com"
project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/code-server-banner.png" project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/code-server-banner.png"
project_blurb: | project_blurb: "[{{ project_name|capitalize }}]({{ project_url }}) is VS Code running on a remote server, accessible through the browser.
[{{ project_name|capitalize }}]({{ project_url }}) is VS Code running on a remote server, accessible through the browser.
- Code on your Chromebook, tablet, and laptop with a consistent dev environment. - Code on your Chromebook, tablet, and laptop with a consistent dev environment.
- If you have a Windows or Mac workstation, more easily develop for Linux. - If you have a Windows or Mac workstation, more easily develop for Linux.
- Take advantage of large cloud servers to speed up tests, compilations, downloads, and more. - Take advantage of large cloud servers to speed up tests, compilations, downloads, and more.
- Preserve battery life when you're on the go. - Preserve battery life when you're on the go.
- All intensive computation runs on your server. - All intensive computation runs on your server.
- You're no longer running excess instances of Chrome.
- You're no longer running excess instances of Chrome."
project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}" project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}"
project_categories: "Programming"
# supported architectures # supported architectures
available_architectures: available_architectures:
- { arch: "{{ arch_x86_64 }}", tag: "amd64-latest"} - { arch: "{{ arch_x86_64 }}", tag: "amd64-latest"}
- { arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"} - { arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"}
- { arch: "{{ arch_armhf }}", tag: "arm32v7-latest"}
# development version
development_versions: true
development_versions_items:
- { tag: "latest", desc: "Stable releases" }
- { 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
param_container_name: "{{ project_name }}" param_container_name: "{{ project_name }}"
param_usage_include_vols: true param_usage_include_vols: true
param_volumes: param_volumes:
- {vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/config", desc: "Contains all relevant configuration files."} - { vol_path: "/config", vol_host_path: "/path/to/appdata/config", desc: "Contains all relevant configuration files." }
param_usage_include_ports: true param_usage_include_ports: true
param_ports: param_ports:
- { external_port: "8443", internal_port: "8443", port_desc: "web gui" } - { external_port: "8443", internal_port: "8443", port_desc: "web gui" }
param_usage_include_env: true
param_env_vars:
- { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London" }
# optional container parameters # optional container parameters
opt_param_usage_include_env: true opt_param_usage_include_env: true
opt_param_env_vars: opt_param_env_vars:
@ -34,8 +51,11 @@ opt_param_env_vars:
- { env_var: "HASHED_PASSWORD", env_value: "", desc: "Optional web gui password, overrides `PASSWORD`, instructions on how to create it is below." } - { env_var: "HASHED_PASSWORD", env_value: "", desc: "Optional web gui password, overrides `PASSWORD`, instructions on how to create it is below." }
- { 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/coder/code-server/blob/main/docs/guide.md#using-a-subdomain)"} - { 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_items: ""
# application setup block # application setup block
app_setup_block_enabled: true app_setup_block_enabled: true
app_setup_block: | app_setup_block: |
@ -51,59 +71,10 @@ app_setup_block: |
### Hashed code-server password ### Hashed code-server password
How to create the [hashed password](https://github.com/cdr/code-server/blob/master/docs/FAQ.md#can-i-store-my-password-hashed). How to create the [hashed password](https://github.com/cdr/code-server/blob/master/docs/FAQ.md#can-i-store-my-password-hashed).
# init diagram
init_diagram: |
"code-server:latest": {
docker-mods
base {
fix-attr +\nlegacy cont-init
}
docker-mods -> base
legacy-services
custom services
init-services -> legacy-services
init-services -> custom services
custom services -> legacy-services
legacy-services -> ci-service-check
init-migrations -> init-adduser
init-config -> init-code-server
init-os-end -> init-config
init-code-server -> init-config-end
init-config -> init-config-end
init-crontab-config -> init-config-end
init-config -> init-crontab-config
init-mods-end -> init-custom-files
base -> init-envfile
base -> init-migrations
init-config-end -> init-mods
init-mods-package-install -> init-mods-end
init-mods -> init-mods-package-install
init-adduser -> init-os-end
init-envfile -> init-os-end
init-custom-files -> init-services
init-services -> svc-code-server
svc-code-server -> legacy-services
init-services -> svc-cron
svc-cron -> legacy-services
}
Base Images: {
"baseimage-ubuntu:noble"
}
"code-server:latest" <- Base Images
# changelog # changelog
changelogs: changelogs:
- {date: "13.10.24:", desc: "Only chown config folder when change to ownership or new install is detected."}
- {date: "09.10.24:", desc: "Manage permissions in /config/.ssh according to file type"}
- {date: "19.08.24:", desc: "Rebase to Ubuntu Noble."}
- {date: "01.07.23:", desc: "Deprecate armhf. As announced [here](https://www.linuxserver.io/blog/a-farewell-to-arm-hf)"}
- {date: "05.10.22:", desc: "Install recommended deps to maintain parity with the older images."}
- {date: "29.09.22:", desc: "Rebase to jammy, switch to s6v3. Fix chown logic to skip `/config/workspace` contents."}
- {date: "20.02.22:", desc: "Install using the official tarballs."}
- {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: "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`." }

View File

@ -0,0 +1,22 @@
#!/usr/bin/with-contenv bash
mkdir -p /config/{extensions,data,workspace,.ssh}
if [ -n "${SUDO_PASSWORD}" ] || [ -n "${SUDO_PASSWORD_HASH}" ]; then
echo "setting up sudo access"
if ! grep -q 'abc' /etc/sudoers; then
echo "adding abc to sudoers"
echo "abc ALL=(ALL:ALL) ALL" >> /etc/sudoers
fi
if [ -n "${SUDO_PASSWORD_HASH}" ]; then
echo "setting sudo password using sudo password hash"
sed -i "s|^abc:\!:|abc:${SUDO_PASSWORD_HASH}:|" /etc/shadow
else
echo "setting sudo password using SUDO_PASSWORD env var"
echo -e "${SUDO_PASSWORD}\n${SUDO_PASSWORD}" | passwd abc
fi
fi
# permissions
chown -R abc:abc \
/config

View File

@ -1,42 +0,0 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
mkdir -p /config/{extensions,data,workspace,.ssh}
if [[ -n "${SUDO_PASSWORD}" ]] || [[ -n "${SUDO_PASSWORD_HASH}" ]]; then
echo "setting up sudo access"
if ! grep -q 'abc' /etc/sudoers; then
echo "adding abc to sudoers"
echo "abc ALL=(ALL:ALL) ALL" >> /etc/sudoers
fi
if [[ -n "${SUDO_PASSWORD_HASH}" ]]; then
echo "setting sudo password using sudo password hash"
sed -i "s|^abc:\!:|abc:${SUDO_PASSWORD_HASH}:|" /etc/shadow
else
echo "setting sudo password using SUDO_PASSWORD env var"
echo -e "${SUDO_PASSWORD}\n${SUDO_PASSWORD}" | passwd abc
fi
fi
if [[ ! -f /config/.bashrc ]]; then
cp /root/.bashrc /config/.bashrc
fi
if [[ ! -f /config/.profile ]]; then
cp /root/.profile /config/.profile
fi
# fix permissions (ignore contents of workspace)
PUID=${PUID:-911}
if [[ ! "$(stat -c %u /config/.profile)" == "${PUID}" ]]; then
echo "Change in ownership or new install detected, please be patient while we chown existing files"
echo "This could take some time"
find /config -path "/config/workspace" -prune -o -exec lsiown abc:abc {} +
lsiown abc:abc /config/workspace
fi
chmod 700 /config/.ssh
if [[ -n "$(ls -A /config/.ssh)" ]]; then
find /config/.ssh/ -type d -exec chmod 700 '{}' \;
find /config/.ssh/ -type f -exec chmod 600 '{}' \;
find /config/.ssh/ -type f -iname '*.pub' -exec chmod 644 '{}' \;
fi

View File

@ -1 +0,0 @@
oneshot

View File

@ -1 +0,0 @@
/etc/s6-overlay/s6-rc.d/init-code-server/run

View File

@ -1,27 +0,0 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
if [[ -n "${PASSWORD}" ]] || [[ -n "${HASHED_PASSWORD}" ]]; then
AUTH="password"
else
AUTH="none"
echo "starting with no password"
fi
if [[ -z ${PROXY_DOMAIN+x} ]]; then
PROXY_DOMAIN_ARG=""
else
PROXY_DOMAIN_ARG="--proxy-domain=${PROXY_DOMAIN}"
fi
exec \
s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z 127.0.0.1 8443" \
s6-setuidgid abc \
/app/code-server/bin/code-server \
--bind-addr 0.0.0.0:8443 \
--user-data-dir /config/data \
--extensions-dir /config/extensions \
--disable-telemetry \
--auth "${AUTH}" \
"${PROXY_DOMAIN_ARG}" \
"${DEFAULT_WORKSPACE:-/config/workspace}"

View File

@ -1 +0,0 @@
longrun

View File

@ -0,0 +1,25 @@
#!/usr/bin/with-contenv bash
if [ -n "${PASSWORD}" ] || [ -n "${HASHED_PASSWORD}" ]; then
AUTH="password"
else
AUTH="none"
echo "starting with no password"
fi
if [ -z ${PROXY_DOMAIN+x} ]; then
PROXY_DOMAIN_ARG=""
else
PROXY_DOMAIN_ARG="--proxy-domain=${PROXY_DOMAIN}"
fi
exec \
s6-setuidgid abc \
/usr/local/bin/code-server \
--bind-addr 0.0.0.0:8443 \
--user-data-dir /config/data \
--extensions-dir /config/extensions \
--disable-telemetry \
--auth "${AUTH}" \
"${PROXY_DOMAIN_ARG}" \
/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