Skip to content

update-db

update-db #23

Workflow file for this run

# пайплайн раз в месяц обновляет базу данных GeoLite2-City.mmdb и создает новый тег
name: update-db
on:
# пайплайн запускается по расписанию и при пуше
schedule:
# запуск ежемесячно (в 00:00, 1-го числа, каждый месяц, независимо от дня недели)
- cron: "0 0 1 * *"
push:
# не запускать повторно при создании тега
tags-ignore:
- "**"
# запуск только при пуше в мастер
branches:
- "master"
# запуск, если изменился код пакета или пайплайна
paths:
- "src/**/*"
- ".github/workflows/**/*"
jobs:
# эта задача обновляет базу данных и создает новый тег в репозитории
update-database:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: update database
env:
# этот секрет нужен для скачивания базы данных geolite2
MAXMIND_LICENSE_KEY: ${{ secrets.MAXMIND_LICENSE_KEY }}
run: |
# без установки этих настроек git не позволит совершать операции
git config user.name maxmind-updater
git config user.email maxmind-updater@github-actions
# скачать и разархивировать базу данных
curl -L -o geoLite2City.tar.gz --url "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=$MAXMIND_LICENSE_KEY&suffix=tar.gz" || exit 1
tar -xzvf geoLite2City.tar.gz || exit 1
rm -f geoLite2City.tar.gz
# если не найден файл с базой данных, выход с ошибкой
geoLite2CityDir="$(ls | grep "GeoLite2-City_" | head -n 1)"
if [ -z "$geoLite2CityDir" ]; then exit 1; fi
# переместить базу данных в нужное место
geoliteCityDbDestPath="src/GeoLite2-City.mmdb"
mv -f "$geoLite2CityDir/GeoLite2-City.mmdb" "$geoliteCityDbDestPath" || exit 1
rm -rf "./$geoLite2CityDir"
# закоммитить изменения
git add "$geoliteCityDbDestPath" || exit 1
if ! git diff-index --quiet HEAD; then
git commit -m "update GeoLite2-City.mmdb" || exit 1
git push || exit 1
fi
- name: create tag
run: |
# скачать список тегов
git fetch --tags origin
revlist="$(git rev-list --tags --max-count=1)"
# взять последний тег
if [ -z "$revlist" ]; then
latestVersion="v1.0.0"
else
latestVersion="$(git describe --tags "$revlist")"
fi
# вычислить новый тег
latestVersionPrefix="$(awk -F'.' '{ $NF=""; print }' <<< "$latestVersion" | tr " " ".")"
latestMinorVersion="$(sed "s/$latestVersionPrefix//g" <<< "$latestVersion")"
newMinorVersion=$(( $latestMinorVersion + 1 ))
newVersion="$latestVersionPrefix$newMinorVersion"
# запушить новый тег
git tag "$newVersion"
git push origin "$newVersion" || exit 1