如何在 GitHub 操作上 运行 Kotlin 脚本?

How to run a Kotlin script on GitHub Actions?

我想 运行 在 CI 中使用 Kotlin 脚本而不依赖 Gradle 项目,这样我就可以轻松地完成使用 shell/bash/batch 难以编程的操作,这样我就可以在需要时使用库。

仅在 Ubuntu/Linux 上使用 Kotlin 脚本 运行 很好,但理想情况下,有一种方法可以在 Windows 和 macOS 目标上使其成为 运行平台特定项目。

更新: Kotlin 现已预装在 GitHub Actions 运行 用户上,无需再预先安装。

首先,确保你有一个正确的 Kotlin 脚本,以 .kts 结尾,或者更好,.main.kts 因为后者会被 IDE 更好地识别(例如 IntelliJ IDEA,Android Studio),尤其是涉及到自动完成和类型分析时。

其次,确保它的第一行是指向正确位置的 shebang:

#!/usr/bin/env kotlin

这将有助于在 CI 中 运行 之前在本地测试脚本,因为 IDE 将在装订线中显示一个 运行 按钮,旁边shebang。 如果您向文件添加执行权限(Linux/macOS 上的 chmod +x YouScript.main.kts),您还可以 运行 它就像任何其他脚本一样,而无需键入 kotlinc -script 之前,这也适用于 GitHub 操作。

最后,这是一个示例手册 GitHub 操作(又名。工作流文件),它将接受输入并将其传递给您的 Kotlin 脚本(可在 args property/parameter 中使用)安装 Kotlin 后:

name: Run Kotlin script

on:
  workflow_dispatch:
    inputs:
      awesome-input:
        description: 'Awesome parameter'
        default: 'You'
        required: true

jobs:
  awesome-action:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Run Kotlin script
      run: kotlinc -script ./YourScript.main.kts ${{ github.event.inputs.awesome-input }}

请注意,如果脚本具有执行 (x) 权限,如我之前所说,您可以删除 kotlinc -script 部分,它仍然会 运行.

好处:通过将 kotlin 用作 shell,可以在工作流文件中直接包含 Kotlin 代码(尽管我不建议这样做)。 请参阅此 YouTrack 评论以了解操作方法:https://youtrack.jetbrains.com/issue/KT-43534#focus=Comments-27-4640716.0-0

Kotlin 运行ner 现已预安装在 GitHub Actions 环境 (GitHub issue, YouTube video) 上。
参考GitHub Actions virtual environments page查看所有安装的软件。

因此,您可以轻松地 运行 您的 .main.kts 脚本,如下所示:

name: Example

on:
  push:
    branches:
      - master

jobs:
  example-action:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Run the script
        run: kotlin /path/in/repo/to/my-script.main.kts

这是一个示例 我的脚本。main.kts 文件:

@file:JvmName("MyScript")
@file:CompilerOptions("-jvm-target", "11")
@file:Repository("https://repo.maven.apache.org/maven2")
// @file:DependsOn("com.example:library:1.2.3")

import java.io.File

val input = File("README.md") // Assuming you ran checkout before
val output = File("result.txt")
val readmeFirstLine = input.readLines().first()
output.writeText(readmeFirstLine)

还有一个名为 setup-kotlin that lets you install your desired version of Kotlin and also provides some more features. Check out this issue 的 GitHub 操作。

...
  - uses: actions/checkout@v2
  - uses: fwilhe2/setup-kotlin@main
    with:
      version: 1.5.0
  - name: Run the script
    run: kotlin /path/in/repo/to/my-script.main.kts