6

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

让 Kotlin 脚本只在 Ubuntu/Linux 上运行很好,但理想情况下,有一种方法可以让它在 Windows 和 macOS 目标以及特定平台的项目上运行。

4

2 回答 2

7

更新: Kotlin 现在已预安装在 GitHub Actions 运行器上,不再需要预先安装。

首先,确保您有正确的 Kotlin 脚本,以.kts或更好的结尾,.main.kts因为后者将被 IDE(例如 IntelliJ IDEA、Android Studio)更好地识别,尤其是在自动完成和类型分析方面。

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

#!/usr/bin/env kotlin

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

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

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

于 2021-07-01T08:02:30.830 回答
3

Kotlin runner 现在已预安装在 GitHub Actions 环境中(GitHub 问题YouTube 视频)。
请参阅GitHub Actions 虚拟环境页面以查看所有已安装的软件。

因此,您可以像这样轻松运行.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

这是一个示例my-script.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的 GitHub 操作,可让您安装所需的 Kotlin 版本并提供更多功能。看看这个问题

...
  - 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
于 2021-09-09T10:40:46.373 回答