Upload Github-Actions Artifacts TO Google Drive
ActionsTags
(2)Github Action To Upload Artifacts to Google Drive Using A Google Drive API.
Watch our comprehensive tutorial on how to use this action:
This tutorial covers:
- Setting up the Google Drive API
- Creating and configuring a service account
- Using the action in your GitHub workflow
- Handling different upload scenarios
steps:
- uses: actions/checkout@v4.1.1
- name: Upload Artifacts TO Google Drive
uses: Jumbo810/Upload_Github_Artifacts_TO_GDrive@v2.3.1
with:
target: <LOCAL_PATH_TO_YOUR_FILE>
credentials: ${{ secrets.YOUR_SERVICE_ACCOUNT_CREDENTIALS }}
parent_folder_id: <YOUR_DRIVE_FOLDER_ID>- Upload files from your GitHub workflow to Google Drive
- Support for uploading multiple files using glob patterns
- Create nested folders automatically
- Option to override existing files
- Support for custom file naming
- Secure handling of Google Drive credentials
- Multiple file handling strategies (delete, update, or add new)
Before using this action, you need to set up the Google Drive API:
-
Go to the Google Cloud Console
-
Create a new project or select an existing one
-
Enable the Google Drive API
-
Create a service account
-
Create a key for the service account (JSON format)
-
Base64 encode the JSON key file:
Windows (PowerShell):
[Convert]::ToBase64String([System.IO.File]::ReadAllBytes("path\to\your-key-file.json"))
macOS:
base64 --input ~/Downloads/your-key-file.jsonlinux:
base64 path/to/your-key-file.json
-
Store the encoded key in a GitHub Secret
-
Create a folder in Google Drive where you want to upload artifacts, then set the share permission to "Editor" so the Github Action can upload the files to this folder using service account.
-
Copy the ID of your Google Drive folder from the browser URL. When you're viewing your folder in Google Drive, the folder ID is the long string of characters that appears after 'folders/' in the URL. For example, in the URL 'https://drive.google.com/drive/folders/1AbCdEfGhIjKlMnOpQrStUvWxYz12345', the folder ID is '1AbCdEfGhIjKlMnOpQrStUvWxYz12345'. You'll need this ID for the parent_folder_id parameter in your GitHub workflow.
For a visual guide, please refer to our video tutorial.
steps:
- uses: actions/checkout@v4.1.1
- name: Upload Multiple Files TO Google Drive
uses: Jumbo810/Upload_Github_Artifacts_TO_GDrive@v2.3.1
with:
target: "dist/*.zip"
credentials: ${{ secrets.YOUR_SERVICE_ACCOUNT_CREDENTIALS }}
parent_folder_id: <YOUR_DRIVE_FOLDER_ID>steps:
- uses: actions/checkout@v4.1.1
- name: Upload to Nested Folder with Custom Name
uses: Jumbo810/Upload_Github_Artifacts_TO_GDrive@v2.3.1
with:
target: build/app.jar
name: application-${{ github.sha }}.jar
credentials: ${{ secrets.YOUR_SERVICE_ACCOUNT_CREDENTIALS }}
parent_folder_id: <YOUR_DRIVE_FOLDER_ID>
child_folder: releases/${{ github.ref_name }}steps:
- uses: actions/checkout@v4.1.1
- name: Upload with Override
uses: Jumbo810/Upload_Github_Artifacts_TO_GDrive@v2.3.1
with:
target: build/latest.zip
credentials: ${{ secrets.YOUR_SERVICE_ACCOUNT_CREDENTIALS }}
parent_folder_id: <YOUR_DRIVE_FOLDER_ID>
override: truesteps:
- uses: actions/checkout@v4.1.1
- name: Upload with Custom Ownership
uses: Jumbo810/Upload_Github_Artifacts_TO_GDrive@v2.3.1
with:
target: build/report.pdf
credentials: ${{ secrets.YOUR_SERVICE_ACCOUNT_CREDENTIALS }}
parent_folder_id: <YOUR_DRIVE_FOLDER_ID>
owner: user@yourdomain.comsteps:
- uses: actions/checkout@v4.1.1
- name: Upload with Update-in-Place Strategy
uses: Jumbo810/Upload_Github_Artifacts_TO_GDrive@v2.3.1
with:
target: build/latest.zip
credentials: ${{ secrets.YOUR_SERVICE_ACCOUNT_CREDENTIALS }}
parent_folder_id: <YOUR_DRIVE_FOLDER_ID>
replace_mode: update_in_place| Parameter | Required | Description |
|---|---|---|
target |
Yes | Local path to the file to upload, can be relative from github runner current directory. You can also specify a glob pattern to upload multiple files at once (this will cause the name property to be ignored). |
credentials |
Yes | A service account public/private key pair encoded in base64. |
parent_folder_id |
Yes | The id of the drive folder where you want to upload your file. It is the string of characters after the last / when browsing to your folder URL. You must share the folder with the service account (using its email address) unless you specify a owner. |
name |
No | The name of the file to be uploaded. Set to the target filename if not specified. (Ignored if target contains a glob * or **) |
child_folder |
No | A sub-folder where to upload your file. It will be created if non-existent and must remain unique. |
owner |
No | The email address of a user account that has access to the drive folder and will get the ownership of the file after its creation. To use this feature you must grant your service account a domain-wide delegation of authority beforehand. |
override |
No | If set true, delete files with the same name before uploading. |
replace_mode |
No | Determines how to handle existing files with the same name. Options: delete_first, update_in_place, or add_new (default) |
The action provides the following outputs that can be used in subsequent steps:
file_id: The ID of the uploaded filefile_name: The name of the uploaded fileweb_view_link: The web view link to access the file in Google Driveupload_count: The number of files uploaded (will be "1")
file_ids: Comma-separated list of file IDsfile_names: Comma-separated list of file namesweb_view_links: Comma-separated list of web view linksupload_count: The number of files uploaded
- name: Upload to Google Drive
id: upload
uses: Jumbo810/Upload_Github_Artifacts_TO_GDrive@v2.3.1
with:
credentials: ${{ secrets.GOOGLE_CREDENTIALS }}
parent_folder_id: ${{ secrets.GOOGLE_PARENT_FOLDER_ID }}
target: "./build/my-app.zip"
- name: Use the upload outputs
run: |
echo "File ID: ${{ steps.upload.outputs.file_id }}"
echo "File Name: ${{ steps.upload.outputs.file_name }}"
echo "Web View Link: ${{ steps.upload.outputs.web_view_link }}"-
Authentication Errors
- Ensure your credentials are correctly base64 encoded
- Check that the service account has access to the specified folder
-
File Not Found
- Verify that the target path is correct
- Check if the file exists in your workflow environment
-
Permission Denied
- Ensure the service account has write access to the folder
- Check if domain-wide delegation is properly set up when using the owner parameter
-
Multiple Files with Same Name
- Use the override parameter to replace existing files
- Use unique filenames or add timestamps to avoid conflicts
This project uses automated workflows to simplify the release process:
-
Automatic Dist Updates: After successful CI runs on the master branch, the
dist/index.jsfile is automatically updated with the latest build artifact. -
Creating a Release:
- Update the version in
package.jsonandCHANGELOG.md - Merge changes to the master branch
- Create and push a new tag:
git tag v2.3.1 && git push origin v2.3.1 - The release workflow will automatically create a GitHub release
- Update the version in
For security best practices when using this action, please refer to our Security Policy.
This project is licensed under the MIT License - see the LICENSE file for details.
Upload Github-Actions Artifacts TO Google Drive is not certified by GitHub. It is provided by a third-party and is governed by separate terms of service, privacy policy, and support documentation.