Hi everyone,
I’ve released this new GitHub Actions called Elixir Script, because I wanted a way to script various tasks in my GitHub Actions workflows and wished for a way to use Elixir to do it.
Thus: ElixirScript, a Github Action to run Elixir code in workflow steps
It works by taking a script as input, which gets run, and then the script’s return is available in outputs.result for later steps to use. Like this:
.github/workflows/example.yml:
- uses: gaggle/elixir_script@v0
  id: script
  with:
    script: |
      defmodule Greeter do
        def greet(name), do: "Oh hi #{name}!"
      end
      Greeter.greet("Mark")
- name: Get result
  run: echo "${{steps.script.outputs.result}}"
  # Echos "Oh hi Mark!"
And the script is run with bindings to the GitHub Actions context that caused the run, so it’s easy to react to run-specific information. For example, :
  script: |
    "🚀 Pushed to #{context.payload.repository.name} by @#{context.actor}!
I think it’s a pretty easy, very low-friction way of getting to write some of the devopsy glue-code automations in Elixir. And it was a lot of fun to write as I got to learn about Elixir and GitHub Actions 🙂.
It also comes with a pre-authenticated GitHub client via Tentacat, so it’s also easy to write scripts that interact with the GitHub API. Here I get a list of stargazers:
- uses: gaggle/elixir_script@v0
  with:
  script: |
    {200, stargazers, _} = Tentacat.Users.Starring.stargazers(client, "gaggle", "elixir_script")
    IO.inspect(Enum.map_join(stargazers, ", ", & &1["login"]), label: "Stargazers")
Or I can can cause changes too, here I star a repository:
- uses: gaggle/elixir_script@v0
  with:
  script: |
    {204, _, _} = Tentacat.Users.Starring.star(client, "gaggle", "elixir_script")
    :ok
Happy to hear any thoughts, feedback, suggestions, etc.
The actual marketplace page is here: Elixir Script · Actions · GitHub Marketplace · GitHub
    
Top comments (0)