Skip to content

Commit

Permalink
added go upload to bunny
Browse files Browse the repository at this point in the history
  • Loading branch information
NOCanoa committed Nov 1, 2024
1 parent 008bbe6 commit 44dd1de
Show file tree
Hide file tree
Showing 5 changed files with 130 additions and 2 deletions.
26 changes: 26 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Upload to bunny

on:
workflow_dispatch:

jobs:
upload:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [1.22.3]

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

- name: cd to upload
run: cd upload

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}

- name: run upload
run: go run main.go ${{ secrets.STORAGE_PASSWORD }} ${{ secrets.STORAGE_NAME }}
1 change: 0 additions & 1 deletion docs/docs.md

This file was deleted.

1 change: 0 additions & 1 deletion docs/vids/lol.md

This file was deleted.

3 changes: 3 additions & 0 deletions upload/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module zenbunnyupload

go 1.22.3
101 changes: 101 additions & 0 deletions upload/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package main

import (
"bytes"
"fmt"
"log"
"net/http"
"os"
"path/filepath"
"sync"
"time"
)

var semaphore = make(chan bool, 45)

func uploadFile(storageZoneName, region, apiKey, filePath string) error {
semaphore <- true
defer func() { <-semaphore }()

fileBytes, err := os.ReadFile(filePath)
if err != nil {
return err
}
relPath, err := filepath.Rel("../", filePath)
if err != nil {
return err
}
req, err := http.NewRequest("PUT", fmt.Sprintf("https://%s.bunnycdn.com/%s/%s", region, storageZoneName, relPath), bytes.NewReader(fileBytes))
if err != nil {
return err
}
req.Header.Set("AccessKey", apiKey)
req.Header.Set("Content-Type", "application/octet-stream")
req.Header.Set("Accept", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
return fmt.Errorf("upload failed with status code %d", resp.StatusCode)
}
log.Printf("Uploaded %s to BunnyStorage\n", relPath)
return nil
}

func uploadFilesToBunnyCDN(storageZoneName, region, apiKey string) error {
distDir := "../"
var wg sync.WaitGroup
errChan := make(chan error)

filepath.Walk(distDir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.Name() == ".git" {
return filepath.SkipDir
}
if !info.IsDir() {
wg.Add(1)
go func(filePath string) {
defer wg.Done()
if err := uploadFile(storageZoneName, region, apiKey, filePath); err != nil {
errChan <- err
}
}(path)
}
return nil
})

go func() {
wg.Wait()
close(errChan)
}()

for err := range errChan {
return err
}

return nil
}

func main() {
start := time.Now()
storageZoneName := "no"
region := "storage"
apiKey := "hehe"

if len(os.Args) >= 3 {
apiKey = os.Args[1]
}
if len(os.Args) >= 3 {
storageZoneName = os.Args[2]
}

if err := uploadFilesToBunnyCDN(storageZoneName, region, apiKey); err != nil {
log.Fatal(err)
}
elapsed := time.Since(start)
log.Printf("Successfully uploaded files to BunnyCDN in %v\n", elapsed)
}

0 comments on commit 44dd1de

Please sign in to comment.