У GitHub Actions існують різні способи зберігання та передачі даних між jobs та workflow, такі як кешування, артефакти та вихідні дані (outputs). Це дозволяє оптимізувати виконання ваших workflow, зберігати важливі файли для подальшого використання та передавати дані між jobs.

Кешування (Caching)

Кешування дозволяє зберігати залежності або інші файли між різними запусками workflow, щоб зменшити час виконання. Це особливо корисно для пакетних менеджерів, таких як npm, Yarn, або Gradle, де збереження залежностей може значно прискорити повторні запуски.

Як працює кешування?

Для кешування використовується дія actions/cache@v2, яка зберігає файли на основі ключів (keys). Якщо ключ, який ви вказали, збігається з тим, що вже збережено, GitHub відновить кешовані файли. Якщо ні, створюється новий кеш.

Приклад використання:


jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Cache node modules
        uses: actions/cache@v2
        with:
          path: node_modules
          key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-node-

У цьому прикладі node_modules буде кешовано на основі змісту файлу package-lock.json.

Артефакти (Artifacts)

Артефакти дозволяють зберігати вихідні файли після завершення jobs і надають їх для подальшого використання, наприклад, для завантаження користувачем або передачі між jobs.

Як працюють артефакти?

Артефакти зберігаються за допомогою дії actions/upload-artifact@v2, яка завантажує файли як артефакти, та дії actions/download-artifact@v2, яка дозволяє їх завантажити в наступних jobs.

Приклад використання:


jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Build project
        run: npm run build
      - name: Upload build artifacts
        uses: actions/upload-artifact@v2
        with:
          name: build-artifacts
          path: ./build

У цьому прикладі створені файли з папки build завантажуються як артефакт.

Вихідні дані (Outputs)

Outputs дозволяють передавати результати виконання одного завдання (job) до іншого. Це дозволяє ділитися ключовою інформацією між різними jobs у workflow.

Як працюють вихідні дані?

Outputs задаються у job і можуть бути доступні у всіх наступних jobs через контекст needs.

Приклад використання: