mirror of
https://github.com/zen-browser/astro-site-test.git
synced 2025-07-08 00:49:58 +02:00
upload
This commit is contained in:
parent
7663df92cd
commit
17d3c3a525
3 changed files with 149 additions and 0 deletions
45
.github/workflows/deploy.yml
vendored
Normal file
45
.github/workflows/deploy.yml
vendored
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
name: Upload to bunny
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
upload:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
go-version: [1.22.3]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 22
|
||||||
|
|
||||||
|
- name: get pnpm
|
||||||
|
run: npm i -g pnpm
|
||||||
|
|
||||||
|
- name: dependencies
|
||||||
|
run: pnpm install
|
||||||
|
|
||||||
|
- name: buld
|
||||||
|
run: pnpm run build
|
||||||
|
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: ${{ matrix.go-version }}
|
||||||
|
|
||||||
|
- name: List Directory Contents
|
||||||
|
run: ls
|
||||||
|
- name: Change Directory and Run Go File
|
||||||
|
run: |
|
||||||
|
cd upload
|
||||||
|
go run main.go ${{ secrets.STORAGE_PASSWORD }} ${{ secrets.STORAGE_NAME }}
|
||||||
|
|
3
upload/go.mod
Normal file
3
upload/go.mod
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
module zen-site-astro
|
||||||
|
|
||||||
|
go 1.22.3
|
101
upload/main.go
Normal file
101
upload/main.go
Normal file
|
@ -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("../dist", 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 := "../dist"
|
||||||
|
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)
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue