Microsoft GitHub Actions Exam (GH-200)
Get full access to the updated question bank and pass on your first attempt.
Vendor
Microsoft
Certification
GitHub
Content
87 Qs
Status
Verified
Updated
1 week ago
Test the Practice Engine
Experience our real exam environment with free demo questions
Premium Bundle
Complete Success Suite
Save $9 Instantly
-
โFull PDF + Interactive Engine Everything you need to pass
-
โAll Advanced Question Types Drag & Drop, Hotspots, Case Studies
-
โPriority 24/7 Expert Support Direct line to certification leads
-
โ90 Days Free Priority Updates Stay current as exams change
Success Metric
98.4% Pass Rate
Standard Simulation
Practice Engine
One-Time Payment
-
Web-Based (Zero Install)
-
Real Testing Environment Virtual & Practice Modes
-
Interactive Engine Drag & Drop, Hotspots
-
60 Days Free Updates
Compatible with All Devices
Basic Tier
PDF Study Guide
Digital Access
- โ Exam Questions (PDF)
- โ Mobile Friendly
- โ 60 Days Updates
Verified 10-Question Preview
Verified Community
The CertoMetrics Standard.
Recommend the #1 platform for verified Microsoft certification resources.
Success Network
Help a Colleague Succeed.
Invite a peer to get their own updated GH-200 prep kit.
Exam Overview
The Microsoft GitHub Actions Exam (GH-200) is a pivotal certification designed to validate your proficiency in automating software development workflows directly within GitHub. Earning this credential signifies your expertise in designing, implementing, and managing robust continuous integration and continuous delivery (CI/CD) pipelines, a cornerstone of modern DevOps practices. This certification not only enhances your technical credibility but also demonstrates your ability to streamline development processes, improve code quality, and accelerate release cycles for any project or organization. It positions you as a skilled professional capable of leveraging GitHub's powerful automation capabilities to drive efficiency, innovation, and reliability in software delivery.
Questions
40-60
Passing Score
700/1000
Duration
120 Minutes
Difficulty
Intermediate
Level
Specialist
Skills Measured
Career Path
Target Roles
Common Questions
Is the material up to date?
Yes. We update our question bank weekly to match the latest Microsoft standards. You get free updates for 90 days.
What format do I get?
You get instant access to both the **PDF** (for reading) and our **Premium Test Engine** (for exam simulation).
Is there a guarantee?
Absolutely. If you fail the GH-200 exam using our materials, we offer a full money-back guarantee.
When do I get the download?
Instantly. The download link is available in your dashboard immediately after payment is confirmed.
Free Study Guide Samples
Previewing updated GH-200 bank (18 Questions).
What can be used to set a failed status of an action from its code?
Correct Option: D
โ **a non-zero exit code **
Reasoning: GitHub Actions runners interpret a non-zero exit code from any step's command or script as a failure. This is the fundamental, universal mechanism for signaling failure across shell, JavaScript, and Docker actions. โ Why the other choices are incorrect:
- Option A is incorrect: The
dist/folder contains compiled JavaScript code; it's the location of the code, not a mechanism for status signaling. - Option B is incorrect: A composite run step bundles multiple steps. While steps within it can fail, "composite run step" itself isn't the method of failure signaling from code.
- Option C is incorrect: Output variables pass data between steps. They are not the standard or primary method for marking an action step as failed.
- Option E is incorrect:
Dockerfile CMDdefines the default command to run in a Docker container. The exit code of that command determines success or failure, not theCMDinstruction itself. - Option F is incorrect: The
@actions/githubtoolkit provides API client access. While@actions/corehassetFailed, the fundamental mechanism recognized by the runner is the non-zero exit code.
As a developer, how can you identify a composite action on GitHub?
Correct Option: D
โ
Reasoning: A composite action is specifically identified in its action.yml metadata file by setting the runs.using key to composite. This configuration explicitly tells GitHub Actions how to execute the action's defined steps. โ Why the other choices are incorrect:
- Option A is incorrect: Repository names are descriptive and not a technical requirement or identifier for an action's type. A composite action repository can have any name.
- Option B is incorrect: An
init.shfile is not a standard or required file for identifying any type of GitHub Action, including composite actions. - Option C is incorrect:
Dockerfileandpackage.jsonfiles are used to define Docker container actions and JavaScript actions, respectively. They do not identify a composite action, which is a different action type.
As a developer, your Actions workflow often reuses the same outputs or downloaded dependencies from one run to another. To cache dependencies for a job, you are using the GitHub cache action. Which input parameters are required for this action? (Each correct answer presents part of the solution. Choose two.)
Correct Option: A,C
โ
Reasoning: The path input is required for the actions/cache action. It specifies the files, directories, or wildcard patterns on the runner that the action should cache or restore.
โ
Reasoning: The key input is mandatory. It provides a unique identifier for the cache entry when saving and is subsequently used to search for and restore a matching cache. โ Why the other choices are incorrect:
- Option B is incorrect:
dependencyis not a valid input parameter for the GitHub cache action. Thepathinput defines the items to be cached. - Option D is incorrect:
restore-keysis an optional input parameter, used for providing fallback keys if the primarykeydoes not yield a cache hit. It is not required. - Option E is incorrect:
cache-hitis an output of the cache action, indicating whether a cache was restored, not an input parameter. - Option F is incorrect:
refis not a recognized input parameter for theactions/cacheaction. Caching operates within the current workflow context.
As a developer, how can you identify a JavaScript action on GitHub?
Correct Option: C
โ
Reasoning: The action.yml metadata file's runs.using property explicitly declares the action's execution environment. For JavaScript actions, this value must be a specific Node.js version (e.g., node16, node20), directly indicating it is a JavaScript-based action type. โ Why the other choices are incorrect:
- Option A is incorrect:
.github/workflowsdirectories contain workflow definitions, not the action's metadata file itself. Ajs.ymlfile there would define a workflow, not identify a reusable action as JavaScript-based. - Option B is incorrect: Repository names are arbitrary and descriptive. While they might hint at the language, they are not a definitive technical mechanism to identify an action's specific type.
- Option D is incorrect: While
package.jsonis common in JavaScript projects, theaction.ymlfile doesn't directly reference it to define the action's type. Theruns.usingproperty, notpackage.jsonpresence, specifies the Node.js runtime.
You are a DevOps engineer working on a custom action. You want to conditionally run a script at the start of the action, before the main entrypoint. Which code block should be used to define the metadata file for your custom action?
Correct Option: B
โ
Reasoning: This code block correctly uses pre: 'start.js' to define the script that runs before main, and pre-if: github.event_name == 'push' to apply the conditional expression. This standard action.yml syntax perfectly matches the requirement for conditionally running a script at the action's start. โ Why the other choices are incorrect:
- Option A is incorrect: The
pre-ifkey is for the conditional expression only; it cannot define the script itself. The syntaxpre-if:... then 'start.js'is invalid. - Option C is incorrect:
startandstart-ifare not valid keywords inaction.ymlfor defining a pre-entrypoint script and its condition. The correct keyword ispre. - Option D is incorrect:
beforeandbefore-ifare not valid keywords inaction.yml. The standard and documented keyword for running a script before the main entrypoint ispre.
Which of the following is the most common way to target a specific major release version?
Correct Option: A
โ
Reasoning: actions/checkout@v3 is the most common and recommended method to target a specific major release version (v3 in this case). This syntax allows for automatic updates to minor versions and bug fixes within that major release, ensuring stability and access to the latest patches. โ Why the other choices are incorrect:
- Option B is incorrect:
steps:- uses: actions/checkoutrefers to the default branch (e.g.,mainormaster), which can be unstable if the maintainer pushes breaking changes directly to the default branch. It does not target a specific major release. - Option C is incorrect:
steps:- uses: actions/checkout@U1673995124uses an arbitrary, non-standard string that does not correspond to a valid Git ref (tag, branch, or SHA) in GitHub Actions for versioning. - Option D is incorrect:
steps:- uses: actions/checkout@ac593995615ec2ede58e132d2e21d2b1cbd6127ctargets a specific Git commit SHA. While precise, it's not the most common way to target a major release as it locks to an immutable point, preventing automatic receipt of minor version updates or bug fixes within that major release.
Which workflow commands send information from the runner? (Each correct answer presents a complete solution. Choose two.)
Correct Option: B,D
โ **setting a debug message **
Reasoning: Workflow commands like echo "::debug::message" send diagnostic information from the runner to the GitHub Actions log. This data helps in debugging workflow execution and is explicitly sent from the runner.
โ **setting output parameters **
Reasoning: Workflow commands such as echo "::set-output name=myOutput::value" (or echo "myOutput=value" >> $GITHUB_OUTPUT) transmit output values from a step or job on the runner, making them available for subsequent steps or jobs in the workflow. โ Why the other choices are incorrect:
- Option A is incorrect: Reading from environment variables is about consuming information on the runner, not sending information from it to the workflow context.
- Option C is incorrect: Populating variables in a Dockerfile relates to defining environment within a container during its build or run, not a workflow command that sends information from the runner to the GitHub Actions workflow.
You are a DevOps engineer working on custom Actions development. You need to handle the errors or exceptions as part of the JavaScript based action code. What should be added to the following code block to handle errors? const core = require('@actions/core'); try {
// action code
} catch (error) {
<< insert snippet here >>
}
Correct Option: C
โ
**core.setFailed(error.message); **
Reasoning: The core.setFailed function is the correct and standard method within the @actions/core library to mark a GitHub Action as failed. When called, it causes the action and, subsequently, the entire workflow run to fail, providing the error message as context. โ Why the other choices are incorrect:
- Option A is incorrect: The
@actions/corelibrary does not include asetExceptionmethod. This is not a valid function for reporting exceptions to fail an action. - Option B is incorrect:
actionis not a defined object in the provided scope. Whilecore.errorexists, it only logs an error message but does not fail the action;setFailedis required to fail the run. - Option D is incorrect: The
@actions/corelibrary does not have acore.actionproperty, nor asetExceptionmethod. This option combines two non-existent elements.
What is the most suitable action type for a custom action written in TypeScript?
Correct Option: D
โ
Reasoning: TypeScript transpiles directly into JavaScript. GitHub Actions' "JavaScript action" type is designed to execute Node.js-based JavaScript files, which perfectly accommodates compiled TypeScript code. This provides the most native and suitable execution environment. โ Why the other choices are incorrect:
- Option A is incorrect: Docker container actions run code within a container. While possible, it's an encapsulation method, not the most suitable action type for TypeScript itself, as it adds unnecessary overhead compared to direct Node.js execution.
- Option B is incorrect: TypeScript is a programming language that compiles to JavaScript, not a Bash script. It cannot be directly executed as a Bash script.
- Option C is incorrect: Composite run steps bundle multiple workflow steps into one. While a compiled TypeScript action could be a step within a composite action, "composite run step" isn't the underlying action type for the TypeScript code itself.
As a developer, you need to integrate a GitHub Actions workflow with a third-party code quality provider that uses the Checks API. How should you trigger a follow-up workflow?
Correct Option: B
โ
Reasoning: The check_run webhook event is specifically designed to trigger workflows based on activity related to GitHub Checks API. Third-party code quality providers use the Checks API to report status. A follow-up workflow can be configured to trigger on check_run events, specifically when the status is completed and the check_run.name matches the integration, signaling its conclusion. โ Why the other choices are incorrect:
- Option A is incorrect: The
workflow_runevent triggers for other GitHub Actions workflows, not directly for the completion of an external Checks API integration. It wouldn't directly capture the third-party check's completion status. - Option C is incorrect: The
pull_requestevent triggers on pull request activity (e.g., opened, synchronized). While code quality runs on PRs, this event doesn't signify the completion of a distinct, external code quality check run. - Option D is incorrect: The
deploymentevent triggers for code deployment activities. This is unrelated to the completion of a code quality analysis performed by a third-party provider using the Checks API.
What is the right method to ensure users approve a workflow before the next step proceeds?
Premium Solution Locked
Unlock all 87 answers & explanations
Which syntax correctly accesses a job output (output1) of an upstream job (job1) from a dependent job within a workflow?
Premium Solution Locked
Unlock all 87 answers & explanations
As a developer, you are optimizing a GitHub workflow that uses and produces many different files. You need to determine when to use caching versus workflow artifacts. Which two statements are true? (Each correct answer presents part of the solution. Choose two.)
Premium Solution Locked
Unlock all 87 answers & explanations
What are the two ways to pass data between jobs? (Each correct answer presents part of the solution. Choose two.)
Premium Solution Locked
Unlock all 87 answers & explanations
Which of the following is a valid reusable workflow reference?
Premium Solution Locked
Unlock all 87 answers & explanations
Disabling a workflow allows you to stop a workflow from being triggered without having to delete the file from the repo. In which scenarios would temporarily disabling a workflow be most useful? (Each correct answer presents a complete solution. Choose two.)
Premium Solution Locked
Unlock all 87 answers & explanations
As a DevOps engineer, you are developing workflows to build an application. You have a requirement to create the build targeting multiple node versions. Which code block should you use to define the workflow?
Premium Solution Locked
Unlock all 87 answers & explanations
What is the proper syntax to reference the system-provided run number variable?
Premium Solution Locked
Unlock all 87 answers & explanations
Full Question Bank Locked
You have reached the end of the free study guide preview. Upgrade now to unlock all 87 questions and the full simulation engine.
Certification Path
Related Certifications
Customer Reviews
Global Community Feedback
David M.
"The practice engine is incredible. It feels exactly like the real testing environment and helped me build so much confidence."
Sarah J.
"The PDF is very well organized and the explanations for the answers are actually helpful, not just random text."
Michael C.
"I was skeptical, but the content is high quality and definitely worth the price. I passed on my first try!"