Create a New Github Action to Automate Code Tasks with Javascript

بواسطة: egghead.io

Overview

Github Actions are an awesome tool from Github that allows us to automate tasks using code-based workflow configuration files. There's also a large marketplace that comes stocked with many useful tools that are ready out of the box.
But sometimes the options available don't completely solve our needs or maybe we're working with a new technology that's simply not available as an Action yet. Luckily, Github allows anyone to create their own Actions using common technologies like Javascript via Node.
We'll learn how to create a new Javascript-based Github Action running on Node. We'll first walk through a simple Hello World example, learn how to test it locally, version control it, use it in the wild, and move on to more advanced solutions that include using packages from npm!

Syllabus

  • Create a New Github Action That Logs Hello World with Javascript and NodeJS
  • Test a New Github Action in Its Repository with a Custom Workflow
  • Use npm to Tag and Version a Github Action Package for Workflow Version Control
  • Use a Custom Github Action to Log Hello World in Another Project
  • Add npm Packages to a Custom Github Action to Use Open Source Libraries
  • Add Configurable Input Controls to Custom Github Actions with Github Actions Toolkit Core
  • Configure Outputs in a Custom Github Action to Use Resulting Data in Other Actions
  • Set an Exit Code on Custom Github Actions to Indicate a Passing or Failing Status
  • Add Debug Logs with the Toolkit Logger to Find and Fix Issues in a Custom Github Action

Taught by

Colby Fayock

Create a New Github Action to Automate Code Tasks with Javascript
الذهاب الي الدورة

Create a New Github Action to Automate Code Tasks with Javascript

بواسطة: egghead.io

  • egghead.io
  • مدفوعة
  • الإنجليزية
  • متاح شهادة
  • متاح في أي وقت
  • الجميع
  • N/A
8.1.2PHP Version319msRequest Duration2MBMemory UsageGET ar/الدورات/{slug}Route
    • Booting (205ms)
    • Application (113ms)
    • 1 x Booting (64.2%)
      204.85ms
      1 x Application (35.55%)
      113.44ms
      14 templates were rendered
      • public.courses.show (resources/views/public/courses/show.blade.php)3bladefile
        Params
        0
        course
        1
        links
        2
        config
      • public.courses.partials.breadcrumbs (resources/views/public/courses/partials/breadcrumbs.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.heading (resources/views/public/courses/partials/heading.blade.php)7bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        classes
      • public.courses.partials.details (resources/views/public/courses/partials/details.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.breadcrumbs (resources/views/public/courses/partials/breadcrumbs.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.heading (resources/views/public/courses/partials/heading.blade.php)7bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        classes
      • public.layouts.main (resources/views/public/layouts/main.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.layouts.partials.meta (resources/views/public/layouts/partials/meta.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.layouts.partials.navbar (resources/views/public/layouts/partials/navbar.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.auth.profile.partials.links (resources/views/public/auth/profile/partials/links.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.layouts.partials.flash-session (resources/views/public/layouts/partials/flash-session.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      uri
      GET ar/الدورات/{slug}
      middleware
      web, localize:ar
      controller
      App\Http\Controllers\CourseController@show
      as
      ar.courses.show
      namespace
      prefix
      /ar
      where
      file
      app/Http/Controllers/CourseController.php:17-35
      6 statements were executed6.02ms
      • select * from `courses` where `slug_ar` = 'create-a-new-github-action-to-automate-code-tasks-with-javascript' limit 1
        4.83ms/app/Http/Controllers/CourseController.php:20corspedia
        Metadata
        Bindings
        • 0. create-a-new-github-action-to-automate-code-tasks-with-javascript
        Backtrace
        • 17. /app/Http/Controllers/CourseController.php:20
        • 18. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 19. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 20. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • update `courses` set `visitors` = `visitors` + 1, `courses`.`updated_at` = '2025-06-02 08:04:55' where `id` = 2127
        540μs/app/Http/Controllers/CourseController.php:21corspedia
        Metadata
        Bindings
        • 0. 2025-06-02 08:04:55
        • 1. 2127
        Backtrace
        • 17. /app/Http/Controllers/CourseController.php:21
        • 18. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 19. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 20. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select `id`, `name_en`, `name_ar`, `topic_id`, `slug_en`, `slug_ar` from `subjects` where `subjects`.`id` in (106)
        170μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select `id`, `name_en`, `name_ar`, `slug_en`, `slug_ar` from `topics` where `topics`.`id` in (1)
        140μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 25. /app/Http/Controllers/CourseController.php:23
        • 26. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 27. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 28. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 29. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `providers` where `providers`.`id` in (29) and `providers`.`deleted_at` is null
        150μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `html_files` where `html_files`.`id` = 2118 limit 1
        190μs/app/Models/Course.php:84corspedia
        Metadata
        Bindings
        • 0. 2118
        Backtrace
        • 21. /app/Models/Course.php:84
        • 28. view::public.courses.show:29
        • 30. /vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:125
        • 31. /vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:58
        • 32. /vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:72
      App\Models\HtmlFile
      1
      App\Models\Provider
      1
      App\Models\Topic
      1
      App\Models\Subject
      1
      App\Models\Course
      1
        _token
        3380K1Ag4dPPpEZYjgLvg267pBpxNgEqDxwQkRYp
        locale
        ar
        _previous
        array:1 [ "url" => "https://www.corspedia.com/ar/%D8%A7%D9%84%D8%AF%D9%88%D8%B1%D8%A7%D8%AA/create...
        _flash
        array:2 [ "old" => [] "new" => [] ]
        PHPDEBUGBAR_STACK_DATA
        []
        path_info
        /ar/%D8%A7%D9%84%D8%AF%D9%88%D8%B1%D8%A7%D8%AA/create-a-new-github-action-to-automate-code-tasks-with-javascript
        status_code
        200
        
        status_text
        OK
        format
        html
        content_type
        text/html; charset=UTF-8
        request_query
        []
        
        request_request
        []
        
        request_headers
        0 of 0
        array:24 [ "cf-ipcountry" => array:1 [ 0 => "US" ] "cf-connecting-ip" => array:1 [ 0 => "3.142.99.115" ] "cdn-loop" => array:1 [ 0 => "cloudflare; loops=1" ] "x-forwarded-proto" => array:1 [ 0 => "https" ] "x-forwarded-for" => array:1 [ 0 => "3.142.99.115" ] "sec-fetch-site" => array:1 [ 0 => "none" ] "accept" => array:1 [ 0 => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" ] "user-agent" => array:1 [ 0 => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" ] "upgrade-insecure-requests" => array:1 [ 0 => "1" ] "sec-ch-ua-platform" => array:1 [ 0 => ""Windows"" ] "sec-ch-ua-mobile" => array:1 [ 0 => "?0" ] "sec-ch-ua" => array:1 [ 0 => ""Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"" ] "cache-control" => array:1 [ 0 => "no-cache" ] "pragma" => array:1 [ 0 => "no-cache" ] "sec-fetch-dest" => array:1 [ 0 => "document" ] "cf-ray" => array:1 [ 0 => "949571546df3ead3-ORD" ] "accept-encoding" => array:1 [ 0 => "gzip, br" ] "priority" => array:1 [ 0 => "u=0, i" ] "sec-fetch-user" => array:1 [ 0 => "?1" ] "sec-fetch-mode" => array:1 [ 0 => "navigate" ] "cf-visitor" => array:1 [ 0 => "{"scheme":"https"}" ] "host" => array:1 [ 0 => "www.corspedia.com" ] "content-length" => array:1 [ 0 => "" ] "content-type" => array:1 [ 0 => "" ] ]
        request_server
        0 of 0
        array:50 [ "USER" => "www-data" "HOME" => "/var/www" "HTTP_CF_IPCOUNTRY" => "US" "HTTP_CF_CONNECTING_IP" => "3.142.99.115" "HTTP_CDN_LOOP" => "cloudflare; loops=1" "HTTP_X_FORWARDED_PROTO" => "https" "HTTP_X_FORWARDED_FOR" => "3.142.99.115" "HTTP_SEC_FETCH_SITE" => "none" "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" "HTTP_USER_AGENT" => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" "HTTP_UPGRADE_INSECURE_REQUESTS" => "1" "HTTP_SEC_CH_UA_PLATFORM" => ""Windows"" "HTTP_SEC_CH_UA_MOBILE" => "?0" "HTTP_SEC_CH_UA" => ""Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"" "HTTP_CACHE_CONTROL" => "no-cache" "HTTP_PRAGMA" => "no-cache" "HTTP_SEC_FETCH_DEST" => "document" "HTTP_CF_RAY" => "949571546df3ead3-ORD" "HTTP_ACCEPT_ENCODING" => "gzip, br" "HTTP_PRIORITY" => "u=0, i" "HTTP_SEC_FETCH_USER" => "?1" "HTTP_SEC_FETCH_MODE" => "navigate" "HTTP_CF_VISITOR" => "{"scheme":"https"}" "HTTP_HOST" => "www.corspedia.com" "REDIRECT_STATUS" => "200" "SERVER_NAME" => "corspedia.com" "SERVER_PORT" => "443" "SERVER_ADDR" => "141.95.147.152" "REMOTE_USER" => "" "REMOTE_PORT" => "58402" "REMOTE_ADDR" => "172.70.126.165" "SERVER_SOFTWARE" => "nginx/1.18.0" "GATEWAY_INTERFACE" => "CGI/1.1" "HTTPS" => "on" "REQUEST_SCHEME" => "https" "SERVER_PROTOCOL" => "HTTP/2.0" "DOCUMENT_ROOT" => "/var/www/corspedia/public" "DOCUMENT_URI" => "/index.php" "REQUEST_URI" => "/ar/%D8%A7%D9%84%D8%AF%D9%88%D8%B1%D8%A7%D8%AA/create-a-new-github-action-to-automate-code-tasks-with-javascript" "SCRIPT_NAME" => "/index.php" "CONTENT_LENGTH" => "" "CONTENT_TYPE" => "" "REQUEST_METHOD" => "GET" "QUERY_STRING" => "" "SCRIPT_FILENAME" => "/var/www/corspedia/public/index.php" "PATH_INFO" => "" "FCGI_ROLE" => "RESPONDER" "PHP_SELF" => "/index.php" "REQUEST_TIME_FLOAT" => 1748851495.3748 "REQUEST_TIME" => 1748851495 ]
        request_cookies
        []
        
        response_headers
        0 of 0
        array:5 [ "content-type" => array:1 [ 0 => "text/html; charset=UTF-8" ] "cache-control" => array:1 [ 0 => "no-cache, private" ] "date" => array:1 [ 0 => "Mon, 02 Jun 2025 08:04:55 GMT" ] "set-cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6InFGWUs3ODkzVThaYkdYK3pBTlYyU1E9PSIsInZhbHVlIjoiRTNFU3VSWnZGZW1RRGF0NVFHVUpIZkx4UVBheGx4WFduQkdkUnU4N0VBSGY0cDlhN2RmakV1Skx5RW5qMHMyemQ0T0Y5UFJHYVkxdkI4QzI0Q01HcnNUb0Q0YVFMWmE5ajRSNDRWNTdyd2dIOTRGR2tHQ1k2d2F2QXdTYjMwd3UiLCJtYWMiOiI2N2Q1NGU0Y2M0YzQ5NjhhZDk4NWZkODE3MGE4MTc5NTg5Y2Y1ZDI1YzEzOGQwNTE3Nzk2M2E5NDkyNWU1NTViIiwidGFnIjoiIn0%3D; expires=Mon, 02 Jun 2025 10:04:55 GMT; Max-Age=7200; path=/; samesite=laxXSRF-TOKEN=eyJpdiI6InFGWUs3ODkzVThaYkdYK3pBTlYyU1E9PSIsInZhbHVlIjoiRTNFU3VSWnZGZW1RRGF0NVFHVUpIZkx4UVBheGx4WFduQkdkUnU4N0VBSGY0cDlhN2RmakV1Skx5RW5qMHMyemQ0T0Y5U" 1 => "laravel_session=eyJpdiI6IlpNa2RyZ052WE1MeHVpOVl2RmozQnc9PSIsInZhbHVlIjoiMEdDOCtnV2xqTm5IMU0yU2pxaC90RmRzOGhKb1drTHAyUlhsLzVES1JoRXFNZDBxY1AycmZmUjZ0T1gyWkFzajRiVDh1eTVKSWJCT1hpbWVrYVByOFhUS0cxeUYxQUxoRUNreWR4TDlrWFB0TjhNVS9qNWZ3b2JHMFA1RUpaV1MiLCJtYWMiOiIwMDBlMTY1OTQ5YjdiYjFhYWY2ODkxNjZhY2IwNmZiNmMwNDFiYzdlY2I3ZjEzNzNlZGZhYjU3ZWRhZjljODllIiwidGFnIjoiIn0%3D; expires=Mon, 02 Jun 2025 10:04:55 GMT; Max-Age=7200; path=/; httponly; samesite=laxlaravel_session=eyJpdiI6IlpNa2RyZ052WE1MeHVpOVl2RmozQnc9PSIsInZhbHVlIjoiMEdDOCtnV2xqTm5IMU0yU2pxaC90RmRzOGhKb1drTHAyUlhsLzVES1JoRXFNZDBxY1AycmZmUjZ0T1gyWkFzajRi" ] "Set-Cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6InFGWUs3ODkzVThaYkdYK3pBTlYyU1E9PSIsInZhbHVlIjoiRTNFU3VSWnZGZW1RRGF0NVFHVUpIZkx4UVBheGx4WFduQkdkUnU4N0VBSGY0cDlhN2RmakV1Skx5RW5qMHMyemQ0T0Y5UFJHYVkxdkI4QzI0Q01HcnNUb0Q0YVFMWmE5ajRSNDRWNTdyd2dIOTRGR2tHQ1k2d2F2QXdTYjMwd3UiLCJtYWMiOiI2N2Q1NGU0Y2M0YzQ5NjhhZDk4NWZkODE3MGE4MTc5NTg5Y2Y1ZDI1YzEzOGQwNTE3Nzk2M2E5NDkyNWU1NTViIiwidGFnIjoiIn0%3D; expires=Mon, 02-Jun-2025 10:04:55 GMT; path=/XSRF-TOKEN=eyJpdiI6InFGWUs3ODkzVThaYkdYK3pBTlYyU1E9PSIsInZhbHVlIjoiRTNFU3VSWnZGZW1RRGF0NVFHVUpIZkx4UVBheGx4WFduQkdkUnU4N0VBSGY0cDlhN2RmakV1Skx5RW5qMHMyemQ0T0Y5U" 1 => "laravel_session=eyJpdiI6IlpNa2RyZ052WE1MeHVpOVl2RmozQnc9PSIsInZhbHVlIjoiMEdDOCtnV2xqTm5IMU0yU2pxaC90RmRzOGhKb1drTHAyUlhsLzVES1JoRXFNZDBxY1AycmZmUjZ0T1gyWkFzajRiVDh1eTVKSWJCT1hpbWVrYVByOFhUS0cxeUYxQUxoRUNreWR4TDlrWFB0TjhNVS9qNWZ3b2JHMFA1RUpaV1MiLCJtYWMiOiIwMDBlMTY1OTQ5YjdiYjFhYWY2ODkxNjZhY2IwNmZiNmMwNDFiYzdlY2I3ZjEzNzNlZGZhYjU3ZWRhZjljODllIiwidGFnIjoiIn0%3D; expires=Mon, 02-Jun-2025 10:04:55 GMT; path=/; httponlylaravel_session=eyJpdiI6IlpNa2RyZ052WE1MeHVpOVl2RmozQnc9PSIsInZhbHVlIjoiMEdDOCtnV2xqTm5IMU0yU2pxaC90RmRzOGhKb1drTHAyUlhsLzVES1JoRXFNZDBxY1AycmZmUjZ0T1gyWkFzajRi" ] ]
        session_attributes
        0 of 0
        array:5 [ "_token" => "3380K1Ag4dPPpEZYjgLvg267pBpxNgEqDxwQkRYp" "locale" => "ar" "_previous" => array:1 [ "url" => "https://www.corspedia.com/ar/%D8%A7%D9%84%D8%AF%D9%88%D8%B1%D8%A7%D8%AA/create-a-new-github-action-to-automate-code-tasks-with-javascript" ] "_flash" => array:2 [ "old" => [] "new" => [] ] "PHPDEBUGBAR_STACK_DATA" => [] ]