---
title: Synchronizing your website with Object Storage using GitHub Actions
description: Learn how to automatically sync files from a GitHub repository with Scaleway Object Storage using GitHub Actions to deploy your website
tags: ci cd github actions object storage s3cmd sync workflow
products:
  - object-storage
dates:
  validation: 2025-03-10
  posted: 2025-03-10
  validation_frequency: 12
difficulty: beginner
usecase:
  - deploy-external-software
ecosystem:
  - third-party
---
import Requirements from '@macros/iam/requirements.mdx'


Deploying your content to Scaleway Object Storage Using GitHub Actions

This tutorial will guide you through setting up a GitHub Action to deploy your Astro site to Scaleway Object Storage. We will use a GitHub Actions workflow to automate the deployment process whenever changes are pushed to the `main` branch.

<Requirements />

- A Scaleway account logged into the [console](https://console.scaleway.com)
- A [GitHub](https://github.com/) repository with your [Astro](https://astro.build/) project.
- A Scaleway Object Storage bucket with the [bucket website](/object-storage/how-to/use-bucket-website/) feature enabled
- Retrieved your Scaleway credentials ([API key](/iam/how-to/create-api-keys/), Project ID, Organization ID).

## Creating the GitHub Actions Workflow

1. In your GitHub repository, navigate to the `.github/workflows` directory. If it does not exist, create it at the root of your repository.
2. Create a new file named `deploy.yml` in the `.github/workflows` directory.

### Define the workflow

Copy and paste the following code into the `deploy.yml` file. This workflow will run on every push to the `main` branch, build your Astro website, and upload the built files to Scaleway Object Storage.

```yaml
name: Upload to Scaleway Object Storage

on:
  push:
    branches:
      - main  # Change this to your default branch if different (e.g. "trunk", or "master")

jobs:
  upload:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '23'

      - name: Install dependencies
        run: npm install

      - name: Build the website
        run: npm run build

      - name: Install s3cmd
        run: sudo apt-get install -y s3cmd

      - name: Install the Scaleway CLI
        uses: scaleway/action-scw@v0
        with:
          version: v2.37.0

      - run: |
          scw object config get type=s3cmd > /home/runner/.s3cfg
          s3cmd --no-mime-magic --guess-mime-type sync ./dist/* s3://your_bucket_name/
        env:
          SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY }}
          SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY }}
          SCW_DEFAULT_PROJECT_ID: ${{ secrets.SCW_DEFAULT_PROJECT_ID }}
          SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_DEFAULT_ORGANIZATION_ID }}
```

### Configure the repository secrets

In your GitHub repository, go to Settings > Secrets and variables > Actions.
Add the following secrets with your Scaleway credentials:

- SCW_ACCESS_KEY
- SCW_SECRET_KEY
- SCW_DEFAULT_PROJECT_ID
- SCW_DEFAULT_ORGANIZATION_ID

### Commit and push your changes

Run the commands below to commit and push the `deploy.yml` file to your repository. If you are working directly on your main branch, this will trigger the GitHub Action to run on the main branch.

```bash
git add .github/workflows/deploy.yml
git commit -m "Add GitHub Action for deploying to Scaleway Object Storage"
git push origin main
```

You can now access your website by clicking the **Website URL** from the **Settings** tab of your bucket in the [Scaleway console](https://console.scaleway.com/object-storage/buckets).

## Alternative build processes

If your project uses a different build process, replace the `Install dependencies` and `Build the website` steps with the appropriate commands for your environment. The code below shows an example of an alternative build process using [Astral](https://astral.sh/).


```yaml
      - name: Install uv
        uses: astral-sh/setup-uv@v5

      - name: Install the project
        run: uv sync --all-extras --dev
      - name: Build the project
        run: uv build
```

## Troubleshooting and additional resources

- If you encounter issues while using your API key with Scaleway Object Storage, refer to the [dedicated troubleshooting](/object-storage/troubleshooting/api-key-does-not-work/).

- Refer to the [official GitHub Actions documentation](https://docs.github.com/en/actions/writing-workflows/quickstart) for more information on how to create and run workflows.

- Learn how to better secure your deployment by properly [setting up IAM and Object Storage](/object-storage/api-cli/combining-iam-and-object-storage/).
