Docker Image CI #27
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }} |