Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How I can get a github actions runner token

I want to create a VM and setup as self-hosted runner during my workflow. Right now, what blocks me is the lack of API that gives me Runner Token. If this exists, I could create the instance and register it as a runner, being able to use it in the next job.

Does anyone now a workaround to get the runner token?

like image 754
Ramon Medeiros Avatar asked Mar 24 '26 22:03

Ramon Medeiros


2 Answers

Late Update

Looks like they have finally created the runner api. See the API specs here.

[POST] /repos/{owner}/{repo}/actions/runners/registration-token

They now also have example snippets on how to do this. See the other answer posted here for a complete example.


Previous Answer

For now you have to create instances manually using the guide found here.

According to a github staff, there is a plan to eventually add an api for generating the runner tokens, but didn't disclose a timeline of when this could happen.

An API for this is on the roadmap. I don't have a timeline to share at the moment. But we'll be posting to the Changelog when this is available.

And to clear up some of the confusion around PATs/runner tokens. The runner token provided via the UI is a temporary token that expires after 60 minutes. It only has the ability to register runners.

PATs are not able to register runners.

like image 170
smac89 Avatar answered Mar 28 '26 01:03

smac89


The API for creating the Registration Token is available already:

  • Here you can read how to create the one for the repository level
  • And here - for the organization level

Using the following JavaScript code, you can create the GitHub Registration Token inside of your GitHub Action:

const core = require('@actions/core');
const github = require('@actions/github');

async function getRegistrationToken() {
  const githubToken = core.getInput('github_token'); // the GitHub Secret Token provided as an input of your GitHub Action using ${{ secrets.GITHUB_TOKEN }}
  const octokit = github.getOctokit(githubToken);

  const response = await octokit.request('POST /repos/{owner}/{repo}/actions/runners/registration-token', {
    owner: github.context.repo.owner, // the value is taken from the environment variable GITHUB_REPOSITORY which is provided by the GitHub Action during runtime
    repo: github.context.repo.repo, // the value is taken from the environment variable GITHUB_REPOSITORY which is provided by the GitHub Action during runtime
  });

  return response.data.token;
}

module.exports = {
  getRegistrationToken,
};

like image 28
Volodymyr Machula Avatar answered Mar 28 '26 03:03

Volodymyr Machula



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!