Недавно появилась любопытная задача: в момент запуска действия на GitHub понять, в каком момент это действие запускалось последний раз, чтобы взять всю историю коммитов с того момента. Проблема в том, что если действие запускается вручную (
on: workflow_dispatch), то просто посмотреть какие-то журналы, видимо, не выйдет.
Пока взял способ с тегами. Каждый раз при запуске создаётся тег:
TAG_NAME="lokalise-sync-${{ github.ref_name }}"
git tag -a "$TAG_NAME" -m "Lokalise sync completed on branch '${{ github.ref_name }}'"
git push origin "$TAG_NAME"Ну, там ещё некоторое количество проверок перед этим.
А затем ищем тег при следующем запуске:
git fetch origin +refs/tags/*:refs/tags/*
if git rev-parse "$TAG_NAME" >/dev/null 2>&1; then
TAG_SHA=$(git rev-list -n 1 "$TAG_NAME")
echo "Found tag '$TAG_NAME' pointing to commit: $TAG_SHA"
echo "base_sha=$TAG_SHA" >> $GITHUB_OUTPUT
fi
Опять же плюс некоторое проверки. Получаем SHA для коммита, когда был запуск. Можно сравнить с
${{ github.sha }}, чтобы узнать, не тот ли это коммит, что и сейчас (повторный запуск).
А потом можно в
tj-actions/changed-files просто передать
base_sha и
sha для сравнения. Да, это тот самый
changed-files, который взломали недавно и выплюнули секретные данные юзеров. Защита от подобных умников довольно несложная, кстати. Можно установить не версию действия, а ссылку на какой-то надёжный коммит (момент релиза проверенной версии):
uses: tj-actions/changed-files@db731a131ccd81ed52a3d463b6d2a4b2856c7ec9
Пока это всё довольно экспериментальная история, но вроде работает ничего. Подробнее можно в этом PR поглядеть
https://github.com/lokalise/lokalise-push-action/pull/11/files