Действия GitHub — как работать с TypeScript

Проблема

Я делаю собственное действие 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";

  • Я не пушу node_modules в репозиторий, только папку dist (пробовал и без папки, строить во время выполнения экшена, но тоже не сработало.)
  • Еще я нашел эту статью, но она тоже не сработала.

Вопросы

  • Любые идеи о том, как мне работать с машинописным текстом в GitHub Actions?
  • Почему модули не загружаются?
  • Есть ли какой-либо учебник, статья, видео, любой тип контента о работе с TypeScript с помощью GitHub Actions for Marketplace? Я нашел этот шаблон, но не могу понять, почему этот работает, а мой нет (шаблон не проверял, может он тоже не работает).
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
2
0
3 758
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы определили 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'

Пробовал с ncc (github.com/vercel/ncc), но тоже не получилось. Я отредактирую вопросы, чтобы добавить более подробную информацию.

user13158171 10.12.2020 15:55
Ответ принят как подходящий

Наконец-то я обнаружил проблему.

Чтобы работать с @actions/core в TypeScript, это правильный способ его импорта:

import * as core from "@actions/core"

Нужно поставить * as.

Извините за неверную информацию, которую я дал в описании вопроса, я был уверен, что импортирую ее правильно.

Подробнее о проекте это моя акция

Почему * as, если я использую импорт машинописного текста с allowSyntheticDefaultImports?

Piyush Kumar Baliyan 19.06.2022 19:58

Другие вопросы по теме