diff --git a/README.md b/README.md
index 76c4d77..1bf7fbd 100644
--- a/README.md
+++ b/README.md
@@ -62,6 +62,10 @@ Refer [here](https://github.com/actions/checkout/blob/v1/README.md) for previous
     # Whether to download Git-LFS files
     # Default: false
     lfs: ''
+
+    # Whether to silent failure
+    # Default: false
+    silentFailure: ''
 ```
 <!-- end usage -->
 
diff --git a/action.yml b/action.yml
index d21e5f1..fa95d2c 100644
--- a/action.yml
+++ b/action.yml
@@ -1,6 +1,6 @@
 name: 'Checkout'
 description: 'Checkout a Git repository at a particular version'
-inputs: 
+inputs:
   repository:
     description: 'Repository name with owner. For example, actions/checkout'
     default: ${{ github.repository }}
@@ -23,6 +23,12 @@ inputs:
   lfs:
     description: 'Whether to download Git-LFS files'
     default: false
+  silentFailure:
+    description: 'Whether to silent failure'
+    default: false
+outputs:
+  failure:
+    description: 'A boolean value to indicate if the checkout failed'
 runs:
   using: node12
   main: dist/index.js
diff --git a/dist/index.js b/dist/index.js
index 4a1027b..4b6be2b 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -2611,7 +2611,18 @@ function run() {
                 // Register problem matcher
                 coreCommand.issueCommand('add-matcher', {}, path.join(__dirname, 'problem-matcher.json'));
                 // Get sources
-                yield gitSourceProvider.getSource(sourceSettings);
+                try {
+                    yield gitSourceProvider.getSource(sourceSettings);
+                }
+                catch (error) {
+                    core.setOutput('failure', 'true');
+                    if (sourceSettings.silentFailure) {
+                        core.info(`Silent Failure: ${error.message}`);
+                    }
+                    else {
+                        throw error;
+                    }
+                }
             }
             finally {
                 // Unregister problem matcher
@@ -10405,6 +10416,9 @@ function getInputs() {
     core.debug(`lfs = ${result.lfs}`);
     // Access token
     result.accessToken = core.getInput('token');
+    // Silent Failure
+    result.silentFailure =
+        (core.getInput('silentFailure') || 'false').toUpperCase() === 'TRUE';
     return result;
 }
 exports.getInputs = getInputs;
diff --git a/src/git-source-provider.ts b/src/git-source-provider.ts
index fc41fd2..fff33b0 100644
--- a/src/git-source-provider.ts
+++ b/src/git-source-provider.ts
@@ -20,6 +20,7 @@ export interface ISourceSettings {
   fetchDepth: number
   lfs: boolean
   accessToken: string
+  silentFailure: boolean
 }
 
 export async function getSource(settings: ISourceSettings): Promise<void> {
diff --git a/src/input-helper.ts b/src/input-helper.ts
index d7d8779..961a9e0 100644
--- a/src/input-helper.ts
+++ b/src/input-helper.ts
@@ -100,5 +100,9 @@ export function getInputs(): ISourceSettings {
   // Access token
   result.accessToken = core.getInput('token')
 
+  // Silent Failure
+  result.silentFailure =
+    (core.getInput('silentFailure') || 'false').toUpperCase() === 'TRUE'
+
   return result
 }
diff --git a/src/main.ts b/src/main.ts
index 26da3aa..caef941 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -19,7 +19,16 @@ async function run(): Promise<void> {
       )
 
       // Get sources
-      await gitSourceProvider.getSource(sourceSettings)
+      try {
+        await gitSourceProvider.getSource(sourceSettings)
+      } catch (error) {
+        core.setOutput('failure', 'true')
+        if (sourceSettings.silentFailure) {
+          core.info(`Silent Failure: ${error.message}`)
+        } else {
+          throw error
+        }
+      }
     } finally {
       // Unregister problem matcher
       coreCommand.issueCommand('remove-matcher', {owner: 'checkout-git'}, '')