Я делаю собственное действие GitHub для Marketplace, чтобы упростить его использование в других проектах.
Действие сделано с помощью TypeScript и использует некоторые пакеты, такие как typescript
, babel
(изменить: больше не используйте babel), @actions/core
и @actions/github
.
Когда я добавляю Action в рабочий процесс другого проекта, он может установить пакеты и собрать проект, даже инициализировать его, но когда начинается выполнение, он не может найти модули @actions и ядро @actions/core не определено ( @actions/core — это первый пакет, который нужно использовать, из-за него произошел сбой конвейера).
Папка node_modules
правильно создана и пакеты внутри нее, но внутри скрипта они не грузятся.
Когда я пытаюсь запустить встроенную версию (обе версии сборщика, версию с ncc и версию с tsc) на моей машине, возникает такая же ошибка:
TypeError: Cannot read property 'getInput' of undefined
Обновлено: проблема заключалась в неправильном импорте пакета @actions/core
Чтобы иметь возможность устанавливать пакеты и собирать, мне пришлось сделать это в моем файле action.yml
:
runs:
using: "composite"
steps:
- run: cd ${{ github.action_path }}
shell: bash
- run: yarn --cwd ${{ github.action_path }} --production=true
shell: bash
- run: yarn --cwd ${{ github.action_path }} build
shell: bash
- run: yarn --cwd ${{ github.action_path }} start
shell: bash
Моя структура папок:
|-dist # THIS IS'NT BEING PUSHED TO THE REPO
|-src
|--index.ts # Where the @actions/core is required
|--... # More files that are imported by index.ts
|-node_modules # THIS IS'NT BEING PUSHED TO THE REPO
|--... # All the packages are here, this is right and ISN'T THE PROBLEM
|-action.yml
|-babel.config.js
|-package.json
|-tsconfig.json
|-yarn.lock
С action.yml, который я отправил выше, возвращается следующая ошибка:
TypeError: Cannot read property 'getInput' of undefined
getInput
- это метод @actions/core
(который импортируется правильно и НЕ ПРОБЛЕМА)
Обновлено: Это была проблема, хахаха.
Если я не запускаю yarn install
или npm install
с каким-либо скриптом, возникает следующая ошибка:
Error: Cannot find module '@actions/core'
В учебниках, которые я видел, ни один из них не требовал установки пакетов, как будто они устанавливались автоматически.
Я также пытался с помощью ncc отправить скомпилированный код в репозиторий действий, но это тоже не сработало.
Мой action.yml:
runs:
using: "node12"
main: "index.js"
Моя структура папок:
|-src
|--index.ts # Where the @actions/core is required
|--... # More files that are imported by index.ts
|-node_modules # THIS IS'NT BEING PUSHED TO THE REPO
|--... # All the packages are here, this is right and ISN'T THE PROBLEM
|-action.yml
|-index.js # The compiled code, that is being pushed to the repo
|-package.json
|-tsconfig.json
|-yarn.lock
С приведенной выше конфигурацией возникает такая же ошибка:
TypeError: Cannot read property 'getInput' of undefined
Вот как я импортирую @actions/core
в первую строку src/index.ts
:
import core from "@actions/core";
Вы определили Composite run steps action
вместо JavaScript action
.
Смотрите объяснение типов действий.
Если вы посмотрите на этот шаблон действия TypeScript, вы увидите, что в нем зарегистрирована папка dist
, и он ссылается на нее в своем action.yaml
в свойстве runs.main
.
Это означает, что вы должны скомпилировать действие TypeScript локально и проверить папку dist
. Также сказано использовать ncc
для компиляции в один файл.
Как описано здесь.
name: 'Your name here'
description: 'Provide a description here'
author: 'Your name or organization here'
inputs:
milliseconds: # change this
required: true
description: 'input description here'
default: 'default value if applicable'
runs:
using: 'node12'
main: 'dist/index.js'
Наконец-то я обнаружил проблему.
Чтобы работать с @actions/core
в TypeScript, это правильный способ его импорта:
import * as core from "@actions/core"
Нужно поставить * as
.
Извините за неверную информацию, которую я дал в описании вопроса, я был уверен, что импортирую ее правильно.
Подробнее о проекте это моя акция
Почему * as, если я использую импорт машинописного текста с allowSyntheticDefaultImports
?
Пробовал с ncc (github.com/vercel/ncc), но тоже не получилось. Я отредактирую вопросы, чтобы добавить более подробную информацию.