Я использовал Clojure, ClojureScript, lein, shadow-cljs, re-frame, Reagent, Emacs и CIDER для работы над проектом динамического веб-приложения Clojure/ClojureScript.
Теперь я пытаюсь сделать так, чтобы зависимости стали частными пакетами Maven, размещенными бесплатно в пакетах GitHub. Я уже успел опубликовать какой-то пакет!
Прямо сейчас у меня есть в моем .yml файле:
on:
workflow_dispatch:
push:
branches:
- main
paths:
- 'project.clj'
pull_request:
paths:
- 'project.clj'
Если я правильно понимаю, это означает, что рабочие процессы GitHub запускаются только после запросов на извлечение при настройке файла project.clj и прямых изменений при main branch настройке project.clj.
Это близко к тому, что мне нужно!
Контекст: я создаю это, чтобы публиковать пакеты Maven как пакеты GitHub. Как известно пользователям clojure, обычно версия проекта «жестко задокументирована в коде» в первой строке файла project.clj. Следовательно, я хочу публиковать новый пакет каждый раз, когда эта библиотека получает новую версию.
Например, в первой строке есть:
(defproject my-repository "0.6.50-RELEASE-TEST-9-via-GitHub-Actions-CD"
В какой-то момент он будет изменен на:
(defproject my-repository "0.6.51"
Я хотел бы настроить скрипт GitHub Actions так, чтобы он запускался только для изменений в этом файле project.clj и в первой строке!
Это возможно?





Я думаю, вы можете использовать команду bash, чтобы проверить, изменилась ли первая строка определенного файла:
jobs:
first-line-filter:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# run only if 'project.clj' file is changed and commit hash of current commit is same as commit of change
- name: second step
if: git blame project.clj -L 1,2 | awk '{print $1;}' == git rev-parse --short HEAD
run: echo "Running"
Я набираю это с телефона, поэтому не уверен в фактическом синтаксисе, но я думаю, что идея сравнения текущего хэша с хэшем git вины первой строки должна работать. Существуют готовые шаги фильтра пути, которые вы можете использовать, если изменился определенный файл, но не строка, насколько я знаю, которую вы можете использовать для более ранней фильтрации.
Если вы очень постараетесь, у вас все получится, но есть более простой способ:
Вы можете прочитать содержимое файла и установить его как версию вашей библиотеки:
(defproject foobar (clojure.string/trim (slurp "./VERSION"))
тогда в вашем рабочем процессе вы следите не за изменениями в project.clj, а только за файлом VERSION, который вы можете обновить с помощью скрипта или чего-то еще, что вам нужно.