1

问题

我正在为 Marketplace 做一个自定义的 GitHub Action,以使其更容易在其他项目中使用。

Action 是用 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 的任何想法?
  • 为什么模块没有加载?
  • 是否有任何教程、文章、视频和任何类型的内容与 TypeScript 和 GitHub Actions for Marketplace 一起使用?我找到了这个模板,但我不知道为什么它有效而我的无效(我没有测试过模板,也许它也不起作用)。
4

2 回答 2

2

我终于发现了问题。

@actions/core在 TypeScript 中使用,这是导入它的正确方法:

import * as core from "@actions/core"

你需要放一个* as.

很抱歉我在问题描述中提供了不正确的信息,我确定我以正确的方式导入它。

有关该项目的更多详细信息,这是我的操作

于 2020-12-10T23:33:39.750 回答
0

您定义了 aComposite run steps action而不是 a JavaScript action

请参阅操作类型的说明

如果您查看此 TypeScript 操作模板,它会签入文件夹并在其属性dist中引用它。action.yamlruns.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'
于 2020-12-10T08:19:30.160 回答