| Title: | Access Meetup Data |
|---|---|
| Description: | Provides programmatic access to the 'Meetup' 'GraphQL' API (<https://www.meetup.com/graphql/>), enabling users to retrieve information about groups, events, and members from 'Meetup' (<https://www.meetup.com/>). Supports authentication via 'OAuth2' and includes functions for common queries and data manipulation tasks. |
| Authors: | Athanasia Mo Mowinckel [aut, cre] (ORCID: <https://orcid.org/0000-0002-5756-0223>), Erin LeDell [aut], Olga Mierzwa-Sulima [aut], Lucy D'Agostino McGowan [aut], Claudia Vitolo [aut], Gabriela De Queiroz [ctb], Michael Beigelmacher [ctb], Augustina Ragwitz [ctb], Greg Sutcliffe [ctb], Rick Pack [ctb], Ben Ubah [ctb], Maëlle Salmon [ctb] (ORCID: <https://orcid.org/0000-0002-2815-0399>), Barret Schloerke [ctb] (ORCID: <https://orcid.org/0000-0001-9986-114X>), RLadies+ [cph] (ROR: <https://ror.org/05wpb1k41>) |
| Maintainer: | Athanasia Mo Mowinckel <[email protected]> |
| License: | MIT + file LICENSE |
| Version: | 0.3.1 |
| Built: | 2026-05-14 19:45:23 UTC |
| Source: | https://github.com/rladies/meetupr |
Search for groups on Meetup using a text query. This function allows you to find groups that match your search criteria.
find_groups( query, topic_id = NULL, category_id = NULL, max_results = 200, handle_multiples = "list", extra_graphql = NULL, asis = FALSE, ... )find_groups( query, topic_id = NULL, category_id = NULL, max_results = 200, handle_multiples = "list", extra_graphql = NULL, asis = FALSE, ... )
query |
Character string to search for groups |
topic_id |
Numeric ID of a topic to filter groups by |
category_id |
Numeric ID of a category to filter groups by |
max_results |
Maximum number of results to return. If set to NULL, will return all available results (may take a long time). |
handle_multiples |
Character. How to handle multiple matches. One of "list" or "first", or "error". If "list", return a list-column with all matches. If "first", return only the first match. |
extra_graphql |
A graphql object. Extra objects to return |
asis |
Return the raw API response as-is without processing |
... |
other named variables for graphql query. options are:
|
A tibble with group information
groups <- find_groups("R-Ladies") groupsgroups <- find_groups("R-Ladies") groups
Search for topics on Meetup using a query string. This function allows you to find topics that match your search criteria.
find_topics( query, max_results = 200, handle_multiples = "list", extra_graphql = NULL, asis = FALSE, ... )find_topics( query, max_results = 200, handle_multiples = "list", extra_graphql = NULL, asis = FALSE, ... )
query |
A string query to search for topics. |
max_results |
Maximum number of results to return. If set to NULL, will return all available results (may take a long time). |
handle_multiples |
Character. How to handle multiple matches. One of "list" or "first", or "error". If "list", return a list-column with all matches. If "first", return only the first match. |
extra_graphql |
A graphql object. Extra objects to return |
asis |
Return the raw API response as-is without processing |
... |
Used for parameter expansion, must be empty. |
A data frame of topics matching the search query.
find_topics("R", max_results = 10) find_topics("Data Science", max_results = 5)find_topics("R", max_results = 10) find_topics("Data Science", max_results = 5)
Retrieves the Meetup OAuth client name from the
MEETUPR_CLIENT_NAME environment variable or defaults to "meetupr".
get_client_name()get_client_name()
A string representing the client name.
Get information for a specified event
get_event(id, extra_graphql = NULL, asis = FALSE, ...)get_event(id, extra_graphql = NULL, asis = FALSE, ...)
id |
Required event ID |
extra_graphql |
A graphql object. Extra objects to return |
asis |
Return the raw API response as-is without processing |
... |
Should be empty. Used for parameter expansion |
A meetupr_event object with information about the specified event
event <- get_event(id = "103349942")event <- get_event(id = "103349942")
Get the comments for a specified event
get_event_comments(id, ..., extra_graphql = NULL)get_event_comments(id, ..., extra_graphql = NULL)
id |
Required event ID |
... |
Should be empty. Used for parameter expansion |
extra_graphql |
A graphql object. Extra objects to return |
A tibble
## Not run: comments <- get_event_comments(id = "103349942") ## End(Not run)## Not run: comments <- get_event_comments(id = "103349942") ## End(Not run)
Get the RSVPs for a specified event
get_event_rsvps( id, max_results = NULL, handle_multiples = "list", extra_graphql = NULL, asis = FALSE, ... )get_event_rsvps( id, max_results = NULL, handle_multiples = "list", extra_graphql = NULL, asis = FALSE, ... )
id |
Required event ID |
max_results |
Maximum number of results to return. If set to NULL, will return all available results (may take a long time). |
handle_multiples |
Character. How to handle multiple matches. One of "list" or "first", or "error". If "list", return a list-column with all matches. If "first", return only the first match. |
extra_graphql |
A graphql object. Extra objects to return |
asis |
Return the raw API response as-is without processing |
... |
Should be empty. Used for parameter expansion |
A tibble with the RSVPs for the specified event
rsvps <- get_event_rsvps(id = "103349942")rsvps <- get_event_rsvps(id = "103349942")
Get detailed information about a Meetup group
get_group(urlname, asis = FALSE)get_group(urlname, asis = FALSE)
urlname |
The URL name of the Meetup group (e.g., "rladies-lagos") |
asis |
Return the raw API response as-is without processing |
A list containing detailed information about the Meetup group
get_group("rladies-lagos")get_group("rladies-lagos")
Get the events from a meetup group
get_group_events( urlname, status = NULL, date_before = NULL, date_after = NULL, max_results = NULL, handle_multiples = "list", extra_graphql = NULL, asis = FALSE, ... )get_group_events( urlname, status = NULL, date_before = NULL, date_after = NULL, max_results = NULL, handle_multiples = "list", extra_graphql = NULL, asis = FALSE, ... )
urlname |
Character. The name of the group as indicated in the https://www.meetup.com/ url. |
status |
Character vector of event statuses to retrieve. |
date_before |
Datetime string in "YYYY-MM-DDTHH:MM:SSZ" (ISO8601) format. Events occurring before this date/time will be returned. |
date_after |
Datetime string in "YYYY-MM-DDTHH:MM:SSZ" (ISO8601) format. Events occurring after this date/time will be returned. |
max_results |
Maximum number of results to return. If set to NULL, will return all available results (may take a long time). |
handle_multiples |
Character. How to handle multiple matches. One of "list" or "first", or "error". If "list", return a list-column with all matches. If "first", return only the first match. |
extra_graphql |
A graphql object. Extra objects to return |
asis |
Return the raw API response as-is without processing |
... |
Should be empty. Used for parameter expansion |
A tibble with the events for the specified group
get_group_events("rladies-lagos", "past") get_group_events( "rladies-lagos", status = "past", date_before = "2023-01-01T12:00:00Z" )get_group_events("rladies-lagos", "past") get_group_events( "rladies-lagos", status = "past", date_before = "2023-01-01T12:00:00Z" )
Get the members from a meetup group
get_group_members( urlname, max_results = NULL, handle_multiples = "list", extra_graphql = NULL, asis = FALSE, ... )get_group_members( urlname, max_results = NULL, handle_multiples = "list", extra_graphql = NULL, asis = FALSE, ... )
urlname |
Character. The name of the group as indicated in the https://www.meetup.com/ url. |
max_results |
Maximum number of results to return. If set to NULL, will return all available results (may take a long time). |
handle_multiples |
Character. How to handle multiple matches. One of "list" or "first", or "error". If "list", return a list-column with all matches. If "first", return only the first match. |
extra_graphql |
A graphql object. Extra objects to return |
asis |
Return the raw API response as-is without processing |
... |
Should be empty. Used for parameter expansion |
A tibble with group members
get_group_members("rladies-lagos")get_group_members("rladies-lagos")
Meetup Pro is a premium service for organizations managing multiple Meetup groups. This functionality allows you to access details about the groups within a Pro network and the events they host.
get_pro_groups( urlname, max_results = NULL, handle_multiples = "list", extra_graphql = NULL, asis = FALSE, ... ) get_pro_events( urlname, status = NULL, date_before = NULL, date_after = NULL, max_results = NULL, handle_multiples = "list", extra_graphql = NULL, asis = FALSE, ... )get_pro_groups( urlname, max_results = NULL, handle_multiples = "list", extra_graphql = NULL, asis = FALSE, ... ) get_pro_events( urlname, status = NULL, date_before = NULL, date_after = NULL, max_results = NULL, handle_multiples = "list", extra_graphql = NULL, asis = FALSE, ... )
urlname |
Character. The name of the group as indicated in the https://www.meetup.com/ url. |
max_results |
Maximum number of results to return. If set to NULL, will return all available results (may take a long time). |
handle_multiples |
Character. How to handle multiple matches. One of "list" or "first", or "error". If "list", return a list-column with all matches. If "first", return only the first match. |
extra_graphql |
A graphql object. Extra objects to return |
asis |
Return the raw API response as-is without processing |
... |
Should be empty. Used for parameter expansion |
status |
Which status the events should have. |
date_before |
Datetime string in "YYYY-MM-DDTHH:MM:SSZ" (ISO8601) format. Events occurring before this date/time will be returned. |
date_after |
Datetime string in "YYYY-MM-DDTHH:MM:SSZ" (ISO8601) format. Events occurring after this date/time will be returned. |
tibble with pro network information
A tibble with meetup pro information
get_pro_groups(): retrieve groups in a pro network
get_pro_events(): retrieve events from a pro network
urlname <- "rladies" members <- get_pro_groups(urlname) upcoming_events <- get_pro_events(urlname, "upcoming", max_results = 5)urlname <- "rladies" members <- get_pro_groups(urlname) upcoming_events <- get_pro_events(urlname, "upcoming", max_results = 5)
Retrieves detailed information about the currently authenticated Meetup user, including basic profile data, account type, subscription status, and API access permissions.
get_self(asis = FALSE)get_self(asis = FALSE)
asis |
Return the raw API response as-is without processing |
A list containing user information
user <- get_self() cat("Hello", user$name, "!")user <- get_self() cat("Hello", user$name, "!")
Sets the level of verbosity for httr2::local_verbosity(),
and the MEETUPR_DEBUG environment variable.
Can help debug issues with API requests.
local_meetupr_debug(verbosity = 0, env = rlang::caller_env())local_meetupr_debug(verbosity = 0, env = rlang::caller_env())
verbosity |
How much debug information to show. 0 = off, 1 = basic, 2 = verbose, 3 = very verbose |
env |
The environment in which to set the variable. |
The old debug value (invisibly)
## Not run: local_meetupr_debug(2) # Turn off debug mode local_meetupr_debug(0) ## End(Not run)## Not run: local_meetupr_debug(2) # Turn off debug mode local_meetupr_debug(0) ## End(Not run)
Attempts to retrieve information about the currently authenticated
user. On success a message is emitted and the user object is
returned. On failure a message is shown and NULL is returned.
meetupr_auth(client_name = get_client_name())meetupr_auth(client_name = get_client_name())
client_name |
OAuth client name |
A user list (invisibly) or NULL on failure
Check all authentication methods and return details
Logical checker
meetupr_auth_status(client_name = get_client_name(), silent = FALSE) has_auth(client_name = get_client_name())meetupr_auth_status(client_name = get_client_name(), silent = FALSE) has_auth(client_name = get_client_name())
client_name |
A string representing the name of the client. By
default, it is set to |
silent |
logical, suppress messages if TRUE |
list with logicals and details for each method
has_auth(): Check if any
authentication method is available
## Not run: # Check detailed authentication status with default client name status_details <- meetupr_auth_status() # Check detailed authentication status with a specific client name status_details <- meetupr_auth_status(client_name = "custom_client") # Suppress output messages status_details <- meetupr_auth_status(silent = TRUE) ## End(Not run)## Not run: # Check detailed authentication status with default client name status_details <- meetupr_auth_status() # Check detailed authentication status with a specific client name status_details <- meetupr_auth_status(client_name = "custom_client") # Suppress output messages status_details <- meetupr_auth_status(silent = TRUE) ## End(Not run)
This function creates an httr2 OAuth client for the Meetup API. It uses environment variables or built-in credentials as fallback.
meetupr_client( client_key = NULL, client_secret = NULL, client_name = get_client_name(), ... )meetupr_client( client_key = NULL, client_secret = NULL, client_name = get_client_name(), ... )
client_key |
Optional. The OAuth client ID. |
client_secret |
Optional. The OAuth client secret. |
client_name |
A string representing the name of the client. By
default, it is set to |
... |
Additional arguments passed to |
An httr2 OAuth client object.
Store and retrieve credentials using environment variables.
meetupr_key_set(key, value, client_name = get_client_name()) meetupr_key_get(key, client_name = get_client_name(), error = TRUE) meetupr_key_delete(key, client_name = get_client_name())meetupr_key_set(key, value, client_name = get_client_name()) meetupr_key_get(key, client_name = get_client_name(), error = TRUE) meetupr_key_delete(key, client_name = get_client_name())
key |
Key name: |
value |
Value to be stored. |
client_name |
A string representing the name of the client. By
default, it is set to |
error |
Throw error if key not found. Default TRUE. |
This is an alias of meetupr_credentials with hyphenated envvar names.
Credentials are stored as environment variables with the pattern
{client_name}-{key} (e.g., meetupr-client_key).
client_key: OAuth client ID
client_secret: OAuth client secret
encrypt_path: Path to encrypted token file
encrypt_pwd: Password for encrypted token
jwt_token: JWT token for service account authentication
jwt_issuer: JWT issuer, Meetup account number
meetupr_key_set() and meetupr_key_delete() return
NULL (invisibly), and meetupr_key_get() returns a
character string or NA.
meetupr_key_set(): Store a key in environment variables
meetupr_key_get(): Retrieve a key from environment variables
meetupr_key_delete(): Delete a key from environment variables
Remove cached OAuth tokens and optionally clear stored credentials.
meetupr_deauth(client_name = get_client_name())meetupr_deauth(client_name = get_client_name())
client_name |
OAuth client name |
Invisible NULL
Manage Meetup API authentication in CI environments using encrypted tokens that auto-refresh when expired.
meetupr_encrypt_setup( path = ".meetupr.rds", password = NULL, client_name = get_client_name(), ... ) meetupr_encrypt_load( path = get_encrypted_path(), client_name = get_client_name(), password = meetupr_key_get("encrypt_pwd", client_name = client_name), ... ) get_encrypted_path(client_name = get_client_name())meetupr_encrypt_setup( path = ".meetupr.rds", password = NULL, client_name = get_client_name(), ... ) meetupr_encrypt_load( path = get_encrypted_path(), client_name = get_client_name(), password = meetupr_key_get("encrypt_pwd", client_name = client_name), ... ) get_encrypted_path(client_name = get_client_name())
path |
Path to encrypted token file. Default
|
password |
Encryption password. If NULL, generates random password. |
client_name |
A string representing the name of the client. By
default, it is set to |
... |
Additional arguments to |
Setup: Run meetupr_auth(), then meetupr_encrypt_setup(). Commit
the encrypted file and add password to CI secrets as
meetupr_encrypt_pwd.
meetupr_encrypt_load() checks token expiration and refreshes only
when needed, saving the rotated token back to the encrypted
file.
meetupr_encrypt_setup(): Encryption password (invisibly)
meetupr_encrypt_load(): httr2_token object
meetupr_encrypt_setup(): Setup encrypted token for CI
meetupr_encrypt_load(): Load and refresh encrypted token
get_encrypted_path(): Get encrypted token path
## Not run: meetupr_auth() password <- meetupr_encrypt_setup() # In CI token <- meetupr_encrypt_load() ## End(Not run)## Not run: meetupr_auth() password <- meetupr_encrypt_setup() # In CI token <- meetupr_encrypt_load() ## End(Not run)
This function executes a GraphQL query with the provided variables. It validates the variables, constructs the request, and handles any errors returned by the GraphQL API.
meetupr_query(graphql, ..., .envir = parent.frame())meetupr_query(graphql, ..., .envir = parent.frame())
graphql |
GraphQL query string |
... |
Variables to pass to query |
.envir |
Environment for error handling |
The response from the GraphQL API as a list.
## Not run: query <- " query GetUser($id: ID!) { user(id: $id) { id name } }" meetupr_query(graphql = query, id = "12345") ## End(Not run)## Not run: query <- " query GetUser($id: ID!) { user(id: $id) { id name } }" meetupr_query(graphql = query, id = "12345") ## End(Not run)
This function prepares and configures an HTTP request for interacting with the Meetup API. It handles both interactive and non-interactive OAuth flows. In interactive mode, it uses OAuth authorization code flow. In non-interactive mode (CI/CD), it loads cached tokens.
meetupr_req(rate_limit = 500/60, cache = TRUE, ...)meetupr_req(rate_limit = 500/60, cache = TRUE, ...)
rate_limit |
A numeric value specifying the maximum number of
requests per second. Defaults to |
cache |
A logical value indicating whether to cache the OAuth
token on disk. Defaults to |
... |
Additional arguments passed to |
This function constructs an HTTP POST request directed to the Meetup API and applies appropriate OAuth authentication. The function automatically detects whether it's running in an interactive or non-interactive context:
Interactive: Uses OAuth authorization code flow with browser redirect
Non-interactive: Loads pre-cached token from CI environment or disk
A httr2 request object pre-configured to interact with
the Meetup API.
## Not run: req <- meetupr_req(cache = TRUE) req <- meetupr_req( cache = FALSE, client_key = "your_client_key", client_secret = "your_client_secret" ) ## End(Not run)## Not run: req <- meetupr_req(cache = TRUE) req <- meetupr_req( cache = FALSE, client_key = "your_client_key", client_secret = "your_client_secret" ) ## End(Not run)
This function performs an introspection query on the Meetup GraphQL API to retrieve the full schema details, including available query types, mutation types, and type definitions.
meetupr_schema(asis = FALSE)meetupr_schema(asis = FALSE)
asis |
Logical; if TRUE, returns the raw response from the API as JSON. If FALSE (default), returns the parsed schema object. |
If asis is FALSE (default), the parsed schema object with nested
lists containing query types, mutation types, and type definitions. If
asis is TRUE, a JSON string representation of the schema.
# Get the full schema schema <- meetupr_schema() # Explore what's available names(schema) # Get as JSON for external tools schema_json <- meetupr_schema(asis = TRUE)# Get the full schema schema <- meetupr_schema() # Explore what's available names(schema) # Get as JSON for external tools schema_json <- meetupr_schema(asis = TRUE)
This function retrieves the mutation operations available in the Meetup GraphQL API. Mutations are operations that modify data on the server (create, update, delete).
meetupr_schema_mutations(schema = meetupr_schema())meetupr_schema_mutations(schema = meetupr_schema())
schema |
The schema object obtained from |
A tibble with details about each mutation, including:
Name of the mutation
Human-readable description
Number of arguments the mutation accepts
The GraphQL type returned after mutation
If no mutations are available, returns a tibble with a message.
## Not run: # List all available mutations mutations <- meetupr_schema_mutations() # Check if mutations are supported if (nrow(mutations) > 0 && !"message" %in% names(mutations)) { print(mutations$field_name) } ## End(Not run)## Not run: # List all available mutations mutations <- meetupr_schema_mutations() # Check if mutations are supported if (nrow(mutations) > 0 && !"message" %in% names(mutations)) { print(mutations$field_name) } ## End(Not run)
This function retrieves the root-level query fields available in the Meetup
GraphQL API. These are the entry points for data fetching (e.g.,
groupByUrlname, event, etc.).
meetupr_schema_queries(schema = meetupr_schema())meetupr_schema_queries(schema = meetupr_schema())
schema |
The schema object obtained from |
A tibble with details about each query field, including:
Name of the query field
Human-readable description of the field
Number of arguments the field accepts
The GraphQL type returned by this field
## Not run: # List all available queries queries <- meetupr_schema_queries() # Find group-related queries queries |> dplyr::filter(grepl("group", field_name, ignore.case = TRUE)) ## End(Not run)## Not run: # List all available queries queries <- meetupr_schema_queries() # Find group-related queries queries |> dplyr::filter(grepl("group", field_name, ignore.case = TRUE)) ## End(Not run)
This function searches across all types in the schema by name or description. Useful for discovering what data structures are available (e.g., Event, Group, Venue, Member).
meetupr_schema_search(pattern, schema = meetupr_schema())meetupr_schema_search(pattern, schema = meetupr_schema())
pattern |
A string pattern to search for in type names and descriptions. The search is case-insensitive. |
schema |
The schema object obtained from |
A tibble with details about matching types:
Name of the type
GraphQL kind (OBJECT, ENUM, INTERFACE, etc.)
Human-readable description
Number of fields in the type
## Not run: # Find all event-related types meetupr_schema_search("event") # Find location-related types meetupr_schema_search("location") ## End(Not run)## Not run: # Find all event-related types meetupr_schema_search("event") # Find location-related types meetupr_schema_search("location") ## End(Not run)
This function retrieves detailed information about all fields available on a specific GraphQL type. Use this to discover what data you can query from types like Event, Group, or Member.
meetupr_schema_type(type_name, schema = meetupr_schema(), ...)meetupr_schema_type(type_name, schema = meetupr_schema(), ...)
type_name |
The name of the type for which to retrieve fields (e.g., "Event", "Group", "Member"). |
schema |
The schema object obtained from |
... |
Additional arguments passed to |
A tibble with details about the fields:
Name of the field
Human-readable description
GraphQL type of the field
Logical indicating if field is deprecated
If the type is not found, throws an error. If multiple types match, returns a tibble of matching type names. If the type has no fields, returns a message.
## Not run: # Get all fields on the Event type event_fields <- meetupr_schema_type("Event") # Find deprecated fields event_fields |> dplyr::filter(deprecated) # Pass cached schema to avoid repeated introspection schema <- meetupr_schema() group_fields <- meetupr_schema_type("Group", schema = schema) venue_fields <- meetupr_schema_type("Venue", schema = schema) ## End(Not run)## Not run: # Get all fields on the Event type event_fields <- meetupr_schema_type("Event") # Find deprecated fields event_fields |> dplyr::filter(deprecated) # Pass cached schema to avoid repeated introspection schema <- meetupr_schema() group_fields <- meetupr_schema_type("Group", schema = schema) venue_fields <- meetupr_schema_type("Venue", schema = schema) ## End(Not run)
This function checks the authentication status for the Meetup API. It provides feedback on whether credentials are configured correctly, tests API connectivity, and shows available authentication methods.
meetupr_sitrep()meetupr_sitrep()
Invisibly returns a list with authentication status details.
meetupr_sitrep()meetupr_sitrep()
Create GitHub Actions workflows for JWT and encrypted-token CI auth.
use_gha_jwt_token( client_name = get_client_name(), jwt = "MEETUPR_JWT_TOKEN", client_key = "MEETUPR_client_key", overwrite = FALSE, filename = ".github/workflows/meetupr-jwt-token.yml" ) use_gha_encrypted_token( token_path = get_encrypted_path(), overwrite = FALSE, filename = ".github/workflows/meetupr-rotate-token.yml" )use_gha_jwt_token( client_name = get_client_name(), jwt = "MEETUPR_JWT_TOKEN", client_key = "MEETUPR_client_key", overwrite = FALSE, filename = ".github/workflows/meetupr-jwt-token.yml" ) use_gha_encrypted_token( token_path = get_encrypted_path(), overwrite = FALSE, filename = ".github/workflows/meetupr-rotate-token.yml" )
client_name |
A string representing the name of the client. By
default, it is set to |
jwt |
Name of the GitHub secret that contains the JWT token. Defaults to "MEETUPR_JWT_TOKEN". |
client_key |
Name of the GitHub secret that contains the client id. Defaults to "MEETUPR_client_key". |
overwrite |
If FALSE and file exists, function aborts. |
filename |
Path to write the workflow YAML file.
Defaults to appropriate path in |
token_path |
Path to the encrypted token file in the repo. Defaults to get_encrypted_path(). |
These helpers write workflow YAML into .github/workflows/ so you can
enable non-interactive authentication for meetupr in GitHub Actions.
Which helper to use:
use_gha_jwt_token(): For Meetup Pro accounts that use a static JWT token. The generated workflow provides a JWT and client id as repository secrets so the runner can authenticate via JWT.
use_gha_encrypted_token(): For regular OAuth apps. This creates a
rotation workflow that loads an encrypted .meetupr.rds token,
refreshes it when needed, and writes the rotated encrypted file
back to the repo. Requires a decryption password stored as a
repository secret (default: MEETUPR_ENCRYPT_PWD).
Important notes:
These functions only write the workflow YAML. They do not create repository secrets or commit/push files for you.
Review the generated YAML and add the required secrets in your repository settings before enabling the workflow.
Invisibly returns the path to the created workflow file.
use_gha_jwt_token(): Create workflow for JWT token auth.
use_gha_encrypted_token(): Create workflow for encrypted token rotation.