Skip to content

Docker Image CI

Docker Image CI #31

Workflow file for this run

name: Docker Image CI
on:
schedule:
- cron: '0 0 * * 0' # Запускается каждое воскресенье в 00:00 UTC
workflow_dispatch: # Позволяет запускать workflow вручную
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
check_flutter_release:
runs-on: ubuntu-latest
permissions:
contents: write
outputs:
version_changed: ${{ steps.check_version.outputs.version_changed }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install requests
- name: Check for new Flutter stable release
id: check_version
run: |
python <<EOF
import requests
import json
import os
def get_latest_stable_version():
response = requests.get('https://storage.googleapis.com/flutter_infra_release/releases/releases_linux.json')
releases = json.loads(response.text)
for release in releases['releases']:
if release['channel'] == 'stable':
return release['version']
return None
latest_stable_version = get_latest_stable_version()
if latest_stable_version:
try:
with open('flutter_current_version.txt', 'r') as f:
current_version = f.read().strip()
except FileNotFoundError:
current_version = ''
if latest_stable_version != current_version:
print(f"New stable release of Flutter detected: {latest_stable_version}")
with open('flutter_current_version.txt', 'w') as f:
f.write(latest_stable_version)
print("version_changed=true", file=open(os.environ['GITHUB_OUTPUT'], 'a'))
else:
print("No new stable releases of Flutter found")
print("version_changed=false", file=open(os.environ['GITHUB_OUTPUT'], 'a'))
else:
print("Unable to get info about stable releases of Flutter")
print("version_changed=false", file=open(os.environ['GITHUB_OUTPUT'], 'a'))
EOF
- name: Commit and push if changed
if: steps.check_version.outputs.version_changed == 'true'
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add flutter_current_version.txt
git commit -m "Update Flutter stable version" -a || echo "No changes to commit"
git push
build:
needs: check_flutter_release
if: |
needs.check_flutter_release.outputs.version_changed == 'true' ||
github.event_name == 'push' ||
github.event_name == 'pull_request' ||
github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- name: Find OpenVSCode Server release tag
id: get_openvscode_release_tag
run: |
RESPONSE=$(curl -s "https://registry.hub.docker.com/v2/repositories/gitpod/openvscode-server/tags?page_size=100")
RELEASE_TAG=$(echo $RESPONSE | jq -r '
.results as $results |
$results | map(.name == "latest") | index(true) as $latest_index |
if $latest_index != null then
$results[$latest_index].digest as $latest_digest |
$results[$latest_index+1:] | map(select(.digest == $latest_digest)) | first | .name
else
null
end
')
if [ -z "$RELEASE_TAG" ]; then
RELEASE_TAG="latest"
echo "No specific release tag found after 'latest', using 'latest'"
fi
echo "RELEASE_TAG=$RELEASE_TAG" >> $GITHUB_OUTPUT
echo "Release tag: $RELEASE_TAG"
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Read Flutter version
id: read_version
run: echo "FLUTTER_VERSION=$(cat flutter_current_version.txt)" >> $GITHUB_OUTPUT
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
build-args: |
FLUTTER_VERSION=${{ steps.read_version.outputs.FLUTTER_VERSION }}
tags: |
nullskill/openvscode-server-flutter:latest
nullskill/openvscode-server-flutter:${{ steps.get_openvscode_release_tag.outputs.RELEASE_TAG }}-${{ steps.read_version.outputs.FLUTTER_VERSION }}