Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add sync functionality #1

Open
wants to merge 14 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,43 @@
# salmon-sync

This is a Github Action that syncs a folder to a Google Cloud bucket using `rclone`.
This action is only meant to work for Deephaven's documentation. It could be used in a more general purpose way to sync a folder into any Google cloud bucket (with the proper credentials), but that is subject to change and may break in any version.

## Parameters
```
inputs:
source:
required: true
type: string
description: 'The source directory to sync.'
destination:
required: true
type: string
description: 'The destination directory to sync. Relative to the bucket.'

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this have anything to do with the URL we will generate? Or does it need to include the git repository as the prefix? I see the example has deephaven/deephaven.io/blog so I'm curious what the importance of deephaven/deephaven.io is there

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not entirely sure how the bucket is linked to the website, but this is just a location within the bucket. deephaven/deephaven.io/blog was just where Don wanted the blog content in this case.

project_number:
required: true
type: string
description: 'The Google Cloud project number.'
bucket:
required: true
type: string
description: 'The Google Cloud bucket to sync to.'
credentials:
required: true
type: string
description: 'The Google Cloud credentials.'
```

## Example
The action can be used as a step in a workflow
Here is an example that syncs from the local path `temp/blog` to the blog section of the bucket.
```
- name: Sync to the blog
uses: deephaven/salmon-sync@v1
with:
source: temp/blog
destination: deephaven/deephaven.io/blog
project_number: ${{ secrets.DOCS_GOOGLE_CLOUD_PROJECT_NUMBER}}
bucket: ${{ vars.DOCS_GOOGLE_CLOUD_BUCKET }}
jnumainville marked this conversation as resolved.
Show resolved Hide resolved
credentials: ${{ secrets.DOCS_GOOGLE_CLOUD_CREDENTIALS }}
```
49 changes: 49 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Sync Salmon Directory
description: Syncs a directory to a Google Cloud bucket using rclone.
author: 'deephaven'
inputs:
source:
required: true
type: string
description: 'The source directory to sync.'
destination:
required: true
type: string
description: 'The destination directory to sync. Relative to the bucket.'
project_number:
required: true
type: string
description: 'The Google Cloud project number.'
bucket:
required: true
type: string
description: 'The Google Cloud bucket to sync to.'
credentials:
jnumainville marked this conversation as resolved.
Show resolved Hide resolved
required: true
type: string
description: 'The Google Cloud credentials.'

runs:
using: "composite"
steps:
- name: Setup rclone
uses: AnimMouse/setup-rclone@v1
with:
version: v1.68.1

- name: Decode credentials
shell: bash
run: |
echo $RCLONE_GCS_SERVICE_ACCOUNT_CREDENTIALS_ENCODED | base64 --decode > $HOME/credentials.json
env:
RCLONE_GCS_SERVICE_ACCOUNT_CREDENTIALS_ENCODED: ${{ inputs.credentials }}


- name: Sync source to destination
shell: bash
env:
RCLONE_CONFIG_GCS_TYPE: "google cloud storage"
RCLONE_GCS_SERVICE_ACCOUNT_FILE: $HOME/credentials.json
RCLONE_GCS_PROJECT_NUMBER: ${{ inputs.project_number }}
RCLONE_GCS_BUCKET_POLICY_ONLY: "true"
run: rclone sync ${{ inputs.source }} gcs:${{ inputs.bucket }}/${{ inputs.destination }}