Skip to content

Update and Push Docker Image on New Code-Server Release #248

Update and Push Docker Image on New Code-Server Release

Update and Push Docker Image on New Code-Server Release #248

name: Update and Push Docker Image on New Code-Server Release
on:
push:
branches:
- main
schedule:
- cron: "0 0 */1 * *" # 每天執行一次
jobs:
build-and-push:
runs-on: self-hosted
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Log in to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Get the latest code-server release tag
id: latest_release
run: |
LATEST_RELEASE_TAG=$(curl -s https://api.github.com/repos/coder/code-server/releases/latest | jq -r '.tag_name')
LATEST_RELEASE_TAG=${LATEST_RELEASE_TAG#v} # 移除前綴 v
echo "LATEST_RELEASE_TAG=$LATEST_RELEASE_TAG"
echo "tag=$LATEST_RELEASE_TAG" >> $GITHUB_OUTPUT
# - name: Check if new release is available
# id: check_new_release
# env:
# PREVIOUS_RELEASE_TAG: ${{ secrets.PREVIOUS_RELEASE_TAG }} # 假設您將上一個版本存儲在了 Secrets 中
# run: |
# if [[ "${{ steps.latest_release.outputs.tag }}" != "$PREVIOUS_RELEASE_TAG" ]]; then
# echo "NEW_RELEASE_FOUND=true" >> $GITHUB_ENV
# echo "${{ steps.latest_release.outputs.tag }}" > VERSION
# # 更新 GitHub Secrets 或其他存儲機制以記錄新版本
# else
# echo "NEW_RELEASE_FOUND=false" >> $GITHUB_ENV
- name: Get the latest code-server release time
id: latest_release_time
run: |
release_time=$(curl -s https://api.github.com/repos/coder/code-server/releases/latest | jq -r '.published_at')
echo "RELEASE_TIME=$release_time" >> $GITHUB_ENV
- name: Check if new release was published within the last 24 hours
id: check_release_time
run: |
release_time=$(date -u -d "${{ env.RELEASE_TIME }}" +%s)
current_time=$(date -u +%s)
diff=$((current_time - release_time))
echo "Time difference in seconds: $diff"
echo "Current time in seconds: $current_time"
# Check if the release is recent (within 24 hours)
if [ $diff -le 86400 ]; then
echo "NEW_RELEASE_RECENT=true" >> $GITHUB_ENV
else
echo "NEW_RELEASE_RECENT=false" >> $GITHUB_ENV
fi
- name: Build and push Docker image
if: env.NEW_RELEASE_RECENT == 'true'
run: |
docker build . --file Dockerfile --tag adsfaaron/vscode-server-gpu:${{ steps.latest_release.outputs.tag }} --build-arg CODE_SERVER_VERSION=${{ steps.latest_release.outputs.tag }}
docker push adsfaaron/vscode-server-gpu:${{ steps.latest_release.outputs.tag }}
# Tag and push as latest
docker tag adsfaaron/vscode-server-gpu:${{ steps.latest_release.outputs.tag }} adsfaaron/vscode-server-gpu:latest
docker push adsfaaron/vscode-server-gpu:latest
# Build Docker image with Dockerfile.cuda12
docker build . --file Dockerfile.cuda12 --tag adsfaaron/vscode-server-gpu-cuda12:${{ steps.latest_release.outputs.tag }} --build-arg CODE_SERVER_VERSION=${{ steps.latest_release.outputs.tag }}
# Push the CUDA 12 image to Docker Hub
docker push adsfaaron/vscode-server-gpu-cuda12:${{ steps.latest_release.outputs.tag }}