Compare commits

..

No commits in common. "master" and "4.8.3-ls142" have entirely different histories.

33 changed files with 984 additions and 1873 deletions

2
.editorconfig Normal file → Executable file
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

6
.github/CONTRIBUTING.md vendored Normal file → Executable file
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`.

0
.github/FUNDING.yml vendored Normal file → Executable file
View File

2
.github/ISSUE_TEMPLATE/config.yml vendored Normal file → Executable file
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,19 +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]
permissions:
contents: read
jobs:
manage-project:
permissions:
issues: write
uses: linuxserver/github-workflows/.github/workflows/issue-pr-tracker.yml@v1
secrets: inherit

View File

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

View File

@ -3,42 +3,24 @@ name: External Trigger Main
on: on:
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: 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 exit 0
fi fi
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY echo "**** External trigger running off of master branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_CODE_SERVER_MASTER\". ****"
echo "> External trigger running off of master branch. To disable this trigger, add \`code-server_master\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY echo "**** Retrieving external version ****"
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||') 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
fi
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,
@ -46,43 +28,24 @@ jobs:
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1 exit 1
fi fi
EXT_RELEASE_SANITIZED=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g') EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "Sanitized external version: \`${EXT_RELEASE_SANITIZED}\`" >> $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 \
"https://ghcr.io/token?scope=repository%3Alinuxserver%2Fcode-server%3Apull" \ "https://ghcr.io/token?scope=repository%3Alinuxserver%2Fcode-server%3Apull" \
| 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.oci.image.index.v1+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${tag}")
if jq -e '.layers // empty' <<< "${multidigest}" >/dev/null 2>&1; then
# If there's a layer element it's a single-arch manifest so just get that digest
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/${tag}" \
digest=$(jq -r '.config.digest' <<< "${digest}"); | jq -r 'first(.manifests[].digest)')
fi digest=$(curl -s \
fi --header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${multidigest}" \
| jq -r '.config.digest')
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}")
@ -94,54 +57,40 @@ jobs:
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_SANITIZED}" == "${IMAGE_VERSION}" ]; then if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then
echo "Sanitized version \`${EXT_RELEASE_SANITIZED}\` 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 response=$(curl -iX POST \
echo "> New version detected, but not all artifacts are published yet; skipping trigger" >> $GITHUB_STEP_SUMMARY https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-code-server/job/master/buildWithParameters?PACKAGE_CHECK=false \
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." --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, echo "**** Jenkins job queue url: ${response%$'\r'} ****"
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}], echo "**** Sleeping 10 seconds until job starts ****"
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} sleep 10
else buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY buildurl="${buildurl%$'\r'}"
echo "New sanitized version \`${EXT_RELEASE_SANITIZED}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY echo "**** Jenkins job build url: ${buildurl} ****"
if [[ "${artifacts_found}" == "true" ]]; then echo "**** Attempting to change the Jenkins job description ****"
echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY curl -iX POST \
fi "${buildurl}submitDescription" \
response=$(curl -iX POST \ --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-code-server/job/master/buildWithParameters?PACKAGE_CHECK=false \ --data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|") --data-urlencode "Submit=Submit"
echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY echo "**** Notifying Discord ****"
echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY TRIGGER_REASON="A version change was detected for code-server tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}"
sleep 10 curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url') "description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
buildurl="${buildurl%$'\r'}" "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"
echo "**** Notifying Discord ****"
TRIGGER_REASON="A version change was detected for code-server tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE_SANITIZED}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi
fi fi

View File

@ -2,47 +2,42 @@ name: External Trigger Scheduler
on: on:
schedule: schedule:
- cron: '32 * * * *' - cron: '41 * * * *'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
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

8
.github/workflows/greetings.yml vendored Normal file → Executable file
View File

@ -2,18 +2,12 @@ name: Greetings
on: [pull_request_target, issues] on: [pull_request_target, issues]
permissions:
contents: read
jobs: jobs:
greeting: greeting:
permissions:
issues: write
pull-requests: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
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,102 +2,49 @@ name: Package Trigger Scheduler
on: on:
schedule: schedule:
- cron: '0 20 * * 6' - cron: '00 12 * * 0'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
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 echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****"
if [[ -n "${triggered_branches}" ]]; then echo "**** Notifying Discord ****"
NOTIFY_BRANCHES="**Triggered:** ${triggered_branches} \n" curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
NOTIFY_BUILD_URL="**Build URL:** https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-code-server/activity/ \n" "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"}],
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****" "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi
if [[ -n "${skipped_branches}" ]]; then
NOTIFY_BRANCHES="${NOTIFY_BRANCHES}**Skipped:** ${skipped_branches} \n"
fi
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,
"description": "**Package Check Build(s) for code-server** \n'"${NOTIFY_BRANCHES}"''"${NOTIFY_BUILD_URL}"'"}],
"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:jammy
FROM ghcr.io/linuxserver/baseimage-ubuntu:noble
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@ -18,9 +16,11 @@ RUN \
apt-get update && \ apt-get update && \
apt-get install -y \ apt-get install -y \
git \ git \
jq \
libatomic1 \ libatomic1 \
nano \ nano \
net-tools \ net-tools \
netcat \
sudo && \ sudo && \
echo "**** install code-server ****" && \ echo "**** install code-server ****" && \
if [ -z ${CODE_RELEASE+x} ]; then \ if [ -z ${CODE_RELEASE+x} ]; then \
@ -33,7 +33,6 @@ RUN \
"https://github.com/coder/code-server/releases/download/v${CODE_RELEASE}/code-server-${CODE_RELEASE}-linux-amd64.tar.gz" && \ "https://github.com/coder/code-server/releases/download/v${CODE_RELEASE}/code-server-${CODE_RELEASE}-linux-amd64.tar.gz" && \
tar xf /tmp/code-server.tar.gz -C \ tar xf /tmp/code-server.tar.gz -C \
/app/code-server --strip-components=1 && \ /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 clean && \ apt-get clean && \
rm -rf \ rm -rf \

View File

@ -1,6 +1,4 @@
# syntax=docker/dockerfile:1 FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-jammy
FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-noble
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@ -18,9 +16,11 @@ RUN \
apt-get update && \ apt-get update && \
apt-get install -y \ apt-get install -y \
git \ git \
jq \
libatomic1 \ libatomic1 \
nano \ nano \
net-tools \ net-tools \
netcat \
sudo && \ sudo && \
echo "**** install code-server ****" && \ echo "**** install code-server ****" && \
if [ -z ${CODE_RELEASE+x} ]; then \ if [ -z ${CODE_RELEASE+x} ]; then \
@ -33,7 +33,6 @@ RUN \
"https://github.com/coder/code-server/releases/download/v${CODE_RELEASE}/code-server-${CODE_RELEASE}-linux-arm64.tar.gz" && \ "https://github.com/coder/code-server/releases/download/v${CODE_RELEASE}/code-server-${CODE_RELEASE}-linux-arm64.tar.gz" && \
tar xf /tmp/code-server.tar.gz -C \ tar xf /tmp/code-server.tar.gz -C \
/app/code-server --strip-components=1 && \ /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 clean && \ apt-get clean && \
rm -rf \ rm -rf \

48
Dockerfile.armhf Normal file
View File

@ -0,0 +1,48 @@
FROM ghcr.io/linuxserver/baseimage-ubuntu:arm32v7-jammy
# 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
ARG DEBIAN_FRONTEND="noninteractive"
ENV HOME="/config"
RUN \
echo "**** install runtime dependencies ****" && \
apt-get update && \
apt-get install -y \
git \
jq \
libatomic1 \
nano \
net-tools \
netcat \
sudo && \
echo "**** install code-server ****" && \
if [ -z ${CODE_RELEASE+x} ]; then \
CODE_RELEASE=$(curl -sX GET https://api.github.com/repos/coder/code-server/releases/latest \
| awk '/tag_name/{print $4;exit}' FS='[""]' | sed 's|^v||'); \
fi && \
mkdir -p /app/code-server && \
curl -o \
/tmp/code-server.tar.gz -L \
"https://github.com/coder/code-server/releases/download/v${CODE_RELEASE}/code-server-${CODE_RELEASE}-linux-armv7l.tar.gz" && \
tar xf /tmp/code-server.tar.gz -C \
/app/code-server --strip-components=1 && \
echo "**** clean up ****" && \
apt-get clean && \
rm -rf \
/config/* \
/tmp/* \
/var/lib/apt/lists/* \
/var/tmp/*
# add local files
COPY /root /
# ports and volumes
EXPOSE 8443

1019
Jenkinsfile vendored

File diff suppressed because it is too large Load Diff

0
LICENSE Normal file → Executable file
View File

197
README.md
View File

@ -1,10 +1,12 @@
<!-- 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.")
[![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.")
[![Open Collective](https://img.shields.io/opencollective/all/linuxserver.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Supporters&logo=open%20collective)](https://opencollective.com/linuxserver "please consider helping us by either donating or contributing to our budget") [![Open Collective](https://img.shields.io/opencollective/all/linuxserver.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Supporters&logo=open%20collective)](https://opencollective.com/linuxserver "please consider helping us by either donating or contributing to our budget")
@ -19,14 +21,15 @@ 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.
* [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.
* [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget * [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget
# [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) [![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fcode-server?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh/gateway/linuxserver-ci/docker/linuxserver%2Fcode-server)
[![GitHub Stars](https://img.shields.io/github/stars/linuxserver/docker-code-server.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-code-server) [![GitHub Stars](https://img.shields.io/github/stars/linuxserver/docker-code-server.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-code-server)
[![GitHub Release](https://img.shields.io/github/release/linuxserver/docker-code-server.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-code-server/releases) [![GitHub Release](https://img.shields.io/github/release/linuxserver/docker-code-server.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-code-server/releases)
[![GitHub Package Repository](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub%20Package&logo=github)](https://github.com/linuxserver/docker-code-server/packages) [![GitHub Package Repository](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub%20Package&logo=github)](https://github.com/linuxserver/docker-code-server/packages)
@ -49,7 +52,7 @@ 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/). We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/).
Simply pulling `lscr.io/linuxserver/code-server:latest` should retrieve the correct image for your arch, but you can also pull specific arch images via tags. Simply pulling `lscr.io/linuxserver/code-server:latest` should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
@ -59,6 +62,7 @@ The architectures supported by this image are:
| :----: | :----: | ---- | | :----: | :----: | ---- |
| x86-64 | ✅ | amd64-\<version tag\> | | x86-64 | ✅ | amd64-\<version tag\> |
| arm64 | ✅ | arm64v8-\<version tag\> | | arm64 | ✅ | arm64v8-\<version tag\> |
| armhf| ✅ | arm32v7-\<version tag\> |
## Application Setup ## Application Setup
@ -75,34 +79,15 @@ git config --global user.email "email address"
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).
## Read-Only Operation
This image can be run with a read-only container filesystem. For details please [read the docs](https://docs.linuxserver.io/misc/read-only/).
### Caveats
* `/tmp` must be mounted to tmpfs
* `sudo` will not be available
## Non-Root Operation
This image can be run with a non-root user. For details please [read the docs](https://docs.linuxserver.io/misc/non-root/).
### Caveats
* `sudo` will not be available
## 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: lscr.io/linuxserver/code-server:latest
@ -110,16 +95,15 @@ services:
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 - DEFAULT_WORKSPACE=/config/workspace #optional
- PWA_APPNAME=code-server #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
@ -132,40 +116,36 @@ 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` \ -e DEFAULT_WORKSPACE=/config/workspace `#optional` \
-e PWA_APPNAME=code-server `#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 lscr.io/linuxserver/code-server:latest
``` ```
## 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 | | `-e DEFAULT_WORKSPACE=/config/workspace` | If this optional variable is set, code-server will open this directory by default |
| `-e PWA_APPNAME=code-server` | If this optional variable is set, the PWA app will the specified name. |
| `-v /config` | Contains all relevant configuration files. | | `-v /config` | Contains all relevant configuration files. |
| `--read-only=true` | Run container with a read-only filesystem. Please [read the docs](https://docs.linuxserver.io/misc/read-only/). |
| `--user=1000:1000` | Run container with a non-root user. Please [read the docs](https://docs.linuxserver.io/misc/non-root/). |
## Environment variables from files (Docker secrets) ## Environment variables from files (Docker secrets)
@ -174,10 +154,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
@ -186,20 +166,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
@ -210,101 +185,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" }}' lscr.io/linuxserver/code-server:latest`
* 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 lscr.io/linuxserver/code-server:latest`
* 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`
```bash ### Via Watchtower auto-updater (only use if you don't remember the original parameters)
docker image prune
``` * Pull the latest image at its tag and replace it with the same env variables in one run:
```bash
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
@ -319,22 +246,16 @@ docker build \
-t lscr.io/linuxserver/code-server:latest . -t lscr.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
* **10.08.25:** - Let server listen on both ipv4 and ipv6.
* **03.06.25:** - Allow setting PWA name using env var `PWA_APPNAME`.
* **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. * **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. * **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. * **20.02.22:** - Install using the official tarballs.

View File

@ -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,562 +1,172 @@
NAME VERSION TYPE adduser3.118ubuntu5
@babel/runtime 7.27.6 npm apt2.4.8
@coder/logger 3.0.1 npm apt-utils2.4.8
@mapbox/node-pre-gyp 1.0.11 npm base-files12ubuntu4.2
@microsoft/1ds-core-js 3.2.13 npm base-passwd3.5.52build1
@microsoft/1ds-post-js 3.2.13 npm bash5.1-6ubuntu1
@microsoft/applicationinsights-core-js 2.8.15 npm bsdutils1:2.37.2-4ubuntu3
@microsoft/applicationinsights-shims 2.0.2 npm ca-certificates20211016
@microsoft/dynamicproto-js 1.1.9 npm coreutils8.32-4.1ubuntu1
@phc/format 1.0.0 npm curl7.81.0-1ubuntu1.6
@tootallnate/once 3.0.0 npm dash0.5.11+git20210903+057cd650a4ed-3build1
@tootallnate/quickjs-emscripten 0.23.0 npm debconf1.5.79ubuntu1
@vscode/deviceid 0.1.1 npm debianutils5.5-1ubuntu2
@vscode/iconv-lite-umd 0.7.1 npm diffutils1:3.8-0ubuntu2
@vscode/proxy-agent 0.36.0 npm dirmngr2.2.27-3ubuntu2.1
@vscode/ripgrep 1.15.14 npm dpkg1.21.1ubuntu2.1
@vscode/spdlog 0.15.4 npm e2fsprogs1.46.5-2ubuntu1.1
@vscode/tree-sitter-wasm 0.3.0 npm findutils4.8.0-1ubuntu3
@vscode/vscode-languagedetection 1.0.21 npm gcc-12-base12.1.0-2ubuntu1~22.04
@vscode/watcher 2.5.1-vscode npm git1:2.34.1-1ubuntu1.5
@vscode/windows-process-tree 0.6.2 npm git-man1:2.34.1-1ubuntu1.5
@vscode/windows-registry 1.1.2 npm gnupg2.2.27-3ubuntu2.1
@xterm/addon-clipboard 0.3.0-beta.91 npm gnupg-l10n2.2.27-3ubuntu2.1
@xterm/addon-image 0.10.0-beta.91 npm gnupg-utils2.2.27-3ubuntu2.1
@xterm/addon-ligatures 0.11.0-beta.91 npm gpg2.2.27-3ubuntu2.1
@xterm/addon-progress 0.3.0-beta.91 npm gpg-agent2.2.27-3ubuntu2.1
@xterm/addon-search 0.17.0-beta.91 npm gpgconf2.2.27-3ubuntu2.1
@xterm/addon-serialize 0.15.0-beta.91 npm gpgsm2.2.27-3ubuntu2.1
@xterm/addon-unicode11 0.10.0-beta.91 npm gpgv2.2.27-3ubuntu2.1
@xterm/addon-webgl 0.20.0-beta.101 npm gpg-wks-client2.2.27-3ubuntu2.1
@xterm/headless 6.1.0-beta.91 npm gpg-wks-server2.2.27-3ubuntu2.1
@xterm/xterm 6.1.0-beta.104 npm grep3.7-1build1
ConPTY Interface Library 1.23.251008001 binary (+1 duplicate) gzip1.10-4ubuntu4.1
Console Window and PTY Host (Open Source) 1.23.251008001 binary (+1 duplicate) hostname3.23ubuntu2
abbrev 1.1.1 npm init-system-helpers1.62
accepts 2.0.0 npm jq1.6-2.1ubuntu3
adduser 3.137ubuntu1 deb less590-1build1
agent-base 6.0.2 npm libacl12.3.1-1
agent-base 7.1.1 npm libapt-pkg6.02.4.8
agent-base 7.1.3 npm (+3 duplicates) libassuan02.5.5-1build1
ansi-regex 5.0.1 npm libatomic112.1.0-2ubuntu1~22.04
aproba 2.0.0 npm libattr11:2.5.1-1build1
apt 2.8.3 deb libaudit11:3.0.7-1build1
apt-utils 2.8.3 deb libaudit-common1:3.0.7-1build1
are-we-there-yet 2.0.0 npm libblkid12.37.2-4ubuntu3
argon2 0.31.2 npm libbrotli11.0.9-2build6
argparse 2.0.1 npm libbsd00.11.5-1
ast-types 0.13.4 npm libbz2-1.01.0.8-5build1
balanced-match 1.0.2 npm libc62.35-0ubuntu3.1
base-files 13ubuntu10.3 deb libcap21:2.44-1build3
base-passwd 3.6.3build1 deb libcap-ng00.7.9-2.2build3
base64-js 1.5.1 npm libc-bin2.35-0ubuntu3.1
bash 5.2.21-2ubuntu4 deb libcbor0.80.8.0-2ubuntu1
basic-ftp 5.0.5 npm libcom-err21.46.5-2ubuntu1.1
bat 1.0.0 npm libcrypt11:4.4.27-1
beep-boop 1.2.3 npm libcurl3-gnutls7.81.0-1ubuntu1.6
bindings 1.5.0 npm libcurl47.81.0-1ubuntu1.6
bl 4.1.0 npm libdb5.35.3.28+dfsg1-0.8ubuntu3
body-parser 2.2.0 npm libdebconfclient00.261ubuntu1
brace-expansion 1.1.12 npm libedit23.1-20210910-1build1
braces 3.0.3 npm liberror-perl0.17029-1
bsdutils 1:2.39.3-9ubuntu6.4 deb libexpat12.4.7-1ubuntu0.2
buffer 5.7.1 npm libext2fs21.46.5-2ubuntu1.1
buffer-alloc 1.2.0 npm libffi83.4.2-4
buffer-alloc-unsafe 1.1.0 npm libfido2-11.10.0-1
buffer-crc32 0.2.13 npm libgcc-s112.1.0-2ubuntu1~22.04
buffer-fill 1.0.0 npm libgcrypt201.9.4-3ubuntu3
builtin-notebook-renderers 1.0.0 npm libgdbm61.23-1
bytes 3.1.2 npm libgdbm-compat41.23-1
ca-certificates 20240203 deb libgmp102:6.2.1+dfsg-3ubuntu1
call-bind-apply-helpers 1.0.2 npm libgnutls303.7.3-4ubuntu1.1
call-bound 1.0.4 npm libgpg-error01.43-3
catatonit 0.1.7-1 deb libgssapi-krb5-21.19.2-2
charenc 0.0.2 npm libhogweed63.7.3-1build2
chownr 1.1.4 npm libidn2-02.3.2-2build1
chownr 2.0.0 npm libjq11.6-2.1ubuntu3
clojure 1.0.0 npm libk5crypto31.19.2-2
code-server 1.108.1 npm libkeyutils11.6.1-2ubuntu3
code-server 4.108.1 npm libkrb5-31.19.2-2
coffeescript 1.0.0 npm libkrb5support01.19.2-2
color-support 1.1.3 npm libksba81.6.0-2ubuntu0.1
commander 8.3.0 npm libldap-2.5-02.5.13+dfsg-0ubuntu0.22.04.1
compressible 2.0.18 npm libldap-common2.5.13+dfsg-0ubuntu0.22.04.1
compression 1.8.1 npm liblz4-11.9.3-2build2
concat-map 0.0.1 npm liblzma55.2.5-2ubuntu1
configuration-editing 1.0.0 npm libmd01.0.4-1build1
console-control-strings 1.1.0 npm libmount12.37.2-4ubuntu3
content-disposition 1.0.0 npm libncurses66.3-2
content-type 1.0.5 npm libncursesw66.3-2
cookie 0.7.2 npm (+1 duplicate) libnettle83.7.3-1build2
cookie-parser 1.4.7 npm libnghttp2-141.43.0-1build3
cookie-signature 1.0.6 npm libnpth01.6-3build2
cookie-signature 1.2.2 npm libnsl21.3.0-2build2
coreutils 9.4-3ubuntu6.1 deb libonig56.9.7.1-2build1
cpp 1.0.0 npm libp11-kit00.24.0-6build1
cron 3.0pl1-184ubuntu2 deb libpam0g1.4.0-11ubuntu2
cron-daemon-common 3.0pl1-184ubuntu2 deb libpam-modules1.4.0-11ubuntu2
crypt 0.0.2 npm libpam-modules-bin1.4.0-11ubuntu2
csharp 1.0.0 npm libpam-runtime1.4.0-11ubuntu2
css 1.0.0 npm libpcre2-8-010.39-3ubuntu0.1
css-language-features 1.0.0 npm libpcre32:8.39-13ubuntu0.22.04.1
curl 8.5.0-2ubuntu10.6 deb libperl5.345.34.0-3ubuntu1.1
dart 1.0.0 npm libprocps82:3.3.17-6ubuntu2
dash 0.5.12-6ubuntu5 deb libpsl50.21.0-1.2build2
data-uri-to-buffer 6.0.2 npm libreadline88.1.2-1
debconf 1.5.86ubuntu1 deb librtmp12.4+20151223.gitfa8646d.1-2build4
debianutils 5.17build1 deb libsasl2-22.1.27+dfsg2-3ubuntu1
debug 2.6.9 npm libsasl2-modules2.1.27+dfsg2-3ubuntu1
debug 4.3.4 npm libsasl2-modules-db2.1.27+dfsg2-3ubuntu1
debug 4.4.1 npm libseccomp22.5.3-2ubuntu2
debug-auto-launch 1.0.0 npm libselinux13.3-1build2
debug-server-ready 1.0.0 npm libsemanage23.3-1build2
decompress-response 6.0.0 npm libsemanage-common3.3-1build2
deep-extend 0.6.0 npm libsepol23.3-1build1
degenerator 5.0.1 npm libsmartcols12.37.2-4ubuntu3
delegates 1.0.0 npm libsqlite3-03.37.2-2ubuntu0.1
depd 2.0.0 npm libss21.46.5-2ubuntu1.1
detect-libc 2.0.3 npm libssh-40.9.6-2build1
detect-libc 2.0.4 npm libssl33.0.2-0ubuntu1.7
diff 1.0.0 npm libstdc++612.1.0-2ubuntu1~22.04
diffutils 1:3.10-1build1 deb libsystemd0249.11-0ubuntu3.6
dirmngr 2.4.4-2ubuntu17.4 deb libtasn1-64.18.0-4build1
docker 1.0.0 npm libtinfo66.3-2
dotenv 1.0.0 npm libtirpc31.3.2-2ubuntu0.1
dpkg 1.22.6ubuntu6.5 deb libtirpc-common1.3.2-2ubuntu0.1
dunder-proto 1.0.1 npm libudev1249.11-0ubuntu3.6
e2fsprogs 1.47.0-2.4~exp1ubuntu4.1 deb libunistring21.0-1
ee-first 1.1.1 npm libuuid12.37.2-4ubuntu3
emmet 1.0.0 npm libx11-62:1.7.5-1
emoji-regex 8.0.0 npm libx11-data2:1.7.5-1
encodeurl 2.0.0 npm libxau61:1.0.9-1build5
end-of-stream 1.4.4 npm libxcb11.14-3ubuntu3
env-paths 2.2.1 npm libxdmcp61:1.1.3-0ubuntu5
es-define-property 1.0.1 npm libxext62:1.3.4-1build1
es-errors 1.3.0 npm libxmuu12:1.1.3-3
es-object-atoms 1.1.1 npm libxxhash00.8.1-1
es6-promisify 7.0.0 npm libzstd11.4.8+dfsg-3build1
escape-html 1.0.3 npm locales2.35-0ubuntu3.1
escodegen 2.1.0 npm login1:4.8.1-2ubuntu2
esprima 4.0.1 npm logsave1.46.5-2ubuntu1.1
estraverse 5.3.0 npm lsb-base11.1.0ubuntu4
esutils 2.0.3 npm mawk1.3.4.20200120-3
etag 1.8.1 npm mount2.37.2-4ubuntu3
eventemitter3 4.0.7 npm nano6.2-1
expand-template 2.0.3 npm ncurses-base6.3-2
express 5.1.0 npm ncurses-bin6.3-2
extension-editing 1.0.0 npm netbase6.3
fd-slicer 1.1.0 npm netcat1.218-4ubuntu1
file-uri-to-path 1.0.0 npm netcat-openbsd1.218-4ubuntu1
fill-range 7.1.1 npm net-tools1.60+git20181103.0eebece-1ubuntu5
finalhandler 2.1.0 npm openssh-client1:8.9p1-3
findutils 4.9.0-5build1 deb openssl3.0.2-0ubuntu1.7
follow-redirects 1.15.9 npm passwd1:4.8.1-2ubuntu2
forwarded 0.2.0 npm patch2.7.6-7build2
fresh 2.0.0 npm perl5.34.0-3ubuntu1.1
fs-constants 1.0.0 npm perl-base5.34.0-3ubuntu1.1
fs-extra 11.2.0 npm perl-modules-5.345.34.0-3ubuntu1.1
fs-minipass 2.1.0 npm pinentry-curses1.1.1-1build2
fs.realpath 1.0.0 npm procps2:3.3.17-6ubuntu2
fsharp 1.0.0 npm publicsuffix20211207.1025-1
function-bind 1.1.2 npm readline-common8.1.2-1
gauge 3.0.2 npm sed4.8-1ubuntu2
gcc-14-base 14.2.0-4ubuntu2~24.04 deb sensible-utils0.0.17
get-intrinsic 1.3.0 npm sudo1.9.9-1ubuntu2.1
get-proto 1.0.1 npm sysvinit-utils3.01-1ubuntu1
get-uri 6.0.4 npm tar1.34+dfsg-1build3
git 1.0.0 npm tzdata2022f-0ubuntu0.22.04.1
git 1:2.43.0-1ubuntu7.3 deb ubuntu-keyring2021.03.26
git-base 1.0.0 npm usrmerge25ubuntu2
git-man 1:2.43.0-1ubuntu7.3 deb util-linux2.37.2-4ubuntu3
github 0.0.1 npm xauth1:1.1-1build2
github-authentication 0.0.2 npm zlib1g1:1.2.11.dfsg-2ubuntu9.2
github-from-package 0.0.0 npm
glob 7.2.3 npm
gnupg 2.4.4-2ubuntu17.4 deb
gnupg-l10n 2.4.4-2ubuntu17.4 deb
gnupg-utils 2.4.4-2ubuntu17.4 deb
go 1.0.0 npm
gopd 1.2.0 npm
gpg 2.4.4-2ubuntu17.4 deb
gpg-agent 2.4.4-2ubuntu17.4 deb
gpg-wks-client 2.4.4-2ubuntu17.4 deb
gpgconf 2.4.4-2ubuntu17.4 deb
gpgsm 2.4.4-2ubuntu17.4 deb
gpgv 2.4.4-2ubuntu17.4 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.1 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 25.3.0 npm
iconv-lite 0.6.3 npm
iconv-lite 0.7.0 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-3ubuntu0.24.04.1 deb
js-base64 3.7.7 npm
js-debug 1.105.0 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
katex 0.16.22 npm
kerberos 2.1.1 npm
keyboxd 2.4.4-2ubuntu17.4 deb
krb5-locales 1.20.1-6ubuntu2.6 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.5 deb
libapt-pkg6.0t64 2.8.3 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.4 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.6 deb
libc6 2.39-0ubuntu8.6 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.4 deb
libgpg-error0 1.47-3build2.1 deb
libgssapi-krb5-2 1.20.1-6ubuntu2.6 deb
libhogweed6t64 3.9.1-2.2build1.1 deb
libidn2-0 2.3.7-2build1.1 deb
libjq1 1.7.1-3ubuntu0.24.04.1 deb
libk5crypto3 1.20.1-6ubuntu2.6 deb
libkeyutils1 1.6.3-3build1 deb
libkrb5-3 1.20.1-6ubuntu2.6 deb
libkrb5support0 1.20.1-6ubuntu2.6 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.4 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.5 deb
libpam-modules-bin 1.5.3-5ubuntu5.5 deb
libpam-runtime 1.5.3-5ubuntu5.5 deb
libpam0g 1.5.3-5ubuntu5.5 deb
libpcre2-8-0 10.42-4ubuntu2.1 deb
libperl5.38t64 5.38.2-3.2ubuntu0.2 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.4 deb
libsqlite3-0 3.45.1-1ubuntu2.5 deb
libss2 1.47.0-2.4~exp1ubuntu4.1 deb
libssh-4 0.10.6-2ubuntu0.2 deb
libssl3t64 3.0.13-0ubuntu3.6 deb
libstdc++6 14.2.0-4ubuntu2~24.04 deb
libsystemd0 255.4-1ubuntu8.12 deb
libtasn1-6 4.19.0-3ubuntu0.24.04.2 deb
libtinfo6 6.4+20240113-1ubuntu2 deb
libudev1 255.4-1ubuntu8.12 deb
libunistring5 1.1-2build1.1 deb
libuuid1 2.39.3-9ubuntu6.4 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.6 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
mermaid-chat-features 1.0.0 npm
micromatch 4.0.8 npm
microsoft-authentication 0.0.1 npm
mime-db 1.54.0 npm
mime-types 3.0.1 npm
mimic-response 3.1.0 npm
minimatch 3.1.2 npm
minimist 1.2.8 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.4 deb
ms 2.0.0 npm
ms 2.1.2 npm
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.4 deb
netbase 6.4 deb
netcat-openbsd 1.226-1ubuntu2 deb
netmask 2.0.2 npm
node 22.21.1 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-beta43 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.1.0 npm
once 1.4.0 npm (+1 duplicate)
openssh-client 1:9.6p1-3ubuntu13.14 deb
openssl 3.0.13-0ubuntu3.6 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.3.0 npm
pem 1.14.8 npm
pend 1.2.0 npm
perl 1.0.0 npm
perl 5.38.2-3.2ubuntu0.2 deb
perl-base 5.38.2-3.2ubuntu0.2 deb
perl-modules-5.38 5.38.2-3.2ubuntu0.2 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
prompt 1.0.0 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.14.0 npm
r 1.0.0 npm
range-parser 1.2.1 npm
raw-body 3.0.1 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
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.2.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.2.0 npm
sensible-utils 0.0.22 deb
serve-static 2.2.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.24.04.1 deb
swift 1.0.0 npm
systemd-standalone-sysusers 255.4-1ubuntu8.12 deb
sysvinit-utils 3.08-6ubuntu3 deb
tar 1.35+dfsg-3build1 deb
tar 6.2.1 npm
tar-fs 2.1.4 npm
tar-stream 2.2.0 npm
tas-client 0.3.1 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.1 npm
typescript 1.0.0 npm
typescript 5.8.3 npm
typescript 5.9.3 npm
typescript-language-features 1.0.0 npm
tzdata 2025b-0ubuntu0.24.04.1 deb
ubuntu-keyring 2023.11.28.1 deb
undici 7.9.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.4 deb
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.3.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,46 +4,58 @@
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.
- Take advantage of large cloud servers to speed up tests, compilations, downloads, and more. - If you have a Windows or Mac workstation, more easily develop for Linux.
- Preserve battery life when you're on the go.
- All intensive computation runs on your server. - Take advantage of large cloud servers to speed up tests, compilations, downloads, and more.
- You're no longer running excess instances of Chrome.
- Preserve battery life when you're on the go.
- All intensive computation runs on your server.
- 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: false
development_versions_items:
- { tag: "latest", desc: "Stable releases" }
# 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:
- {env_var: "PASSWORD", env_value: "password", desc: "Optional web gui password, if `PASSWORD` or `HASHED_PASSWORD` is not provided, there will be no auth."} - { env_var: "PASSWORD", env_value: "password", desc: "Optional web gui password, if `PASSWORD` or `HASHED_PASSWORD` is not provided, there will be no auth." }
- {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"} - { env_var: "DEFAULT_WORKSPACE", env_value: "/config/workspace", desc: "If this optional variable is set, code-server will open this directory by default" }
- {env_var: "PWA_APPNAME", env_value: "code-server", desc: "If this optional variable is set, the PWA app will the specified name."}
readonly_supported: true optional_block_1: false
readonly_message: | optional_block_1_items: ""
* `/tmp` must be mounted to tmpfs
* `sudo` will not be available
nonroot_supported: true
nonroot_message: |
* `sudo` will not be available
# application setup block # application setup block
app_setup_block_enabled: true app_setup_block_enabled: true
app_setup_block: | app_setup_block: |
@ -59,75 +71,30 @@ 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
init-adduser -> init-device-perms
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-device-perms -> 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: "10.08.25:", desc: "Let server listen on both ipv4 and ipv6."} - { date: "05.10.22:", desc: "Install recommended deps to maintain parity with the older images." }
- {date: "03.06.25:", desc: "Allow setting PWA name using env var `PWA_APPNAME`."} - { date: "29.09.22:", desc: "Rebase to jammy, switch to s6v3. Fix chown logic to skip `/config/workspace` contents." }
- {date: "13.10.24:", desc: "Only chown config folder when change to ownership or new install is detected."} - { date: "20.02.22:", desc: "Install using the official tarballs." }
- {date: "09.10.24:", desc: "Manage permissions in /config/.ssh according to file type"} - { date: "29.12.21:", desc: "Add `install-extension` as a helper for mods to install extensions." }
- {date: "19.08.24:", desc: "Rebase to Ubuntu Noble."} - { date: "06.12.21:", desc: "Add `DEFAULT_WORKSPACE` env var." }
- {date: "01.07.23:", desc: "Deprecate armhf. As announced [here](https://www.linuxserver.io/blog/a-farewell-to-arm-hf)"} - { date: "29.11.21:", desc: "Rebase to Ubuntu focal." }
- {date: "05.10.22:", desc: "Install recommended deps to maintain parity with the older images."} - { date: "16.09.21:", desc: "Fix slow `chown` on large workspace (contents of workspace folder no longer chowned)." }
- {date: "29.09.22:", desc: "Rebase to jammy, switch to s6v3. Fix chown logic to skip `/config/workspace` contents."} - { date: "11.07.21:", desc: "Bump node to 14 to fix builds" }
- {date: "20.02.22:", desc: "Install using the official tarballs."} - { date: "08.05.21:", desc: "Fix doc link" }
- {date: "29.12.21:", desc: "Add `install-extension` as a helper for mods to install extensions."} - { date: "04.02.20:", desc: "Allow setting gui password via hash using env var `HASHED_PASSWORD`." }
- {date: "06.12.21:", desc: "Add `DEFAULT_WORKSPACE` env var."} - { date: "23.12.20:", desc: "Allow setting sudo password via hash using env var `SUDO_PASSWORD_HASH`." }
- {date: "29.11.21:", desc: "Rebase to Ubuntu focal."} - { date: "29.05.20:", desc: "Add --domain-proxy support." }
- {date: "16.09.21:", desc: "Fix slow `chown` on large workspace (contents of workspace folder no longer chowned)."} - { date: "21.05.20:", desc: "Shrink images, install via yarn, fix arm32v7 build." }
- {date: "11.07.21:", desc: "Bump node to 14 to fix builds"} - { date: "18.05.20:", desc: "Switch to multi-arch images, install via npm." }
- {date: "08.05.21:", desc: "Fix doc link"} - { date: "29.04.20:", desc: "Update start arguments." }
- {date: "04.02.20:", desc: "Allow setting gui password via hash using env var `HASHED_PASSWORD`."} - { date: "01.04.20:", desc: "Structural changes required for v3." }
- {date: "23.12.20:", desc: "Allow setting sudo password via hash using env var `SUDO_PASSWORD_HASH`."} - { date: "17.01.20:", desc: "Fix artifact url retrieval from github." }
- {date: "29.05.20:", desc: "Add --domain-proxy support."} - { date: "24.10.19:", desc: "Upgrade to v2 builds." }
- {date: "21.05.20:", desc: "Shrink images, install via yarn, fix arm32v7 build."} - { date: "28.09.19:", desc: "Update project logo." }
- {date: "18.05.20:", desc: "Switch to multi-arch images, install via npm."} - { date: "21.09.19:", desc: "Add development builds/tag." }
- {date: "29.04.20:", desc: "Update start arguments."} - { date: "09.07.19:", desc: "Add optional sudo access." }
- {date: "01.04.20:", desc: "Structural changes required for v3."} - { date: "01.07.19:", desc: "Add nano." }
- {date: "17.01.20:", desc: "Fix artifact url retrieval from github."} - { date: "24.06.19:", desc: "Initial Release." }
- {date: "24.10.19:", desc: "Upgrade to v2 builds."}
- {date: "28.09.19:", desc: "Update project logo."}
- {date: "21.09.19:", desc: "Add development builds/tag."}
- {date: "09.07.19:", desc: "Add optional sudo access."}
- {date: "01.07.19:", desc: "Add nano."}
- {date: "24.06.19:", desc: "Initial Release."}

View File

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

View File

@ -1 +1 @@
oneshot oneshot

View File

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

View File

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

View File

@ -1 +1 @@
longrun longrun

View File

@ -3,7 +3,7 @@
_install=(/app/code-server/bin/code-server "--extensions-dir" "/config/extensions" "--install-extension") _install=(/app/code-server/bin/code-server "--extensions-dir" "/config/extensions" "--install-extension")
if [[ "$(whoami)" == "abc" ]]; then if [ "$(whoami)" == "abc" ]; then
"${_install[@]}" "$@" "${_install[@]}" "$@"
else else
s6-setuidgid abc "${_install[@]}" "$@" s6-setuidgid abc "${_install[@]}" "$@"