mirror of
https://github.com/Drop-OSS/drop.git
synced 2026-06-22 04:11:32 +10:00
Add lints, new website publish (#428)
* Add lints and new website * Fix droplet CI * Fix droplet ci again * Fix clippy lints
This commit is contained in:
@@ -0,0 +1,56 @@
|
|||||||
|
name: Droplet CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [develop]
|
||||||
|
paths:
|
||||||
|
- "libraries/droplet/**"
|
||||||
|
- "libraries/droplet_types/**"
|
||||||
|
- "libraries/libarchive/**"
|
||||||
|
- ".github/workflows/droplet-ci.yml"
|
||||||
|
pull_request:
|
||||||
|
branches: [develop]
|
||||||
|
paths:
|
||||||
|
- "libraries/droplet/**"
|
||||||
|
- "libraries/droplet_types/**"
|
||||||
|
- "libraries/libarchive/**"
|
||||||
|
- ".github/workflows/droplet-ci.yml"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
env:
|
||||||
|
CARGO_TERM_COLOR: always
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
ci:
|
||||||
|
name: Build, Test, Lint
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: libraries/droplet
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install Rust toolchain
|
||||||
|
uses: dtolnay/rust-toolchain@nightly
|
||||||
|
with:
|
||||||
|
components: rustfmt, clippy
|
||||||
|
|
||||||
|
- name: Rust cache
|
||||||
|
uses: swatinem/rust-cache@v2
|
||||||
|
with:
|
||||||
|
workspaces: "./libraries/droplet -> target"
|
||||||
|
|
||||||
|
- name: Install libarchive
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y libarchive-dev
|
||||||
|
|
||||||
|
- name: Check formatting
|
||||||
|
run: cargo fmt --all -- --check
|
||||||
|
|
||||||
|
- name: Run Clippy (lint)
|
||||||
|
run: cargo clippy --all-targets --all-features -- -D warnings
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: cargo test --all-features --all --verbose
|
||||||
@@ -1,10 +1,15 @@
|
|||||||
name: Deploy Next.js site to Pages
|
name: Deploy website to GitHub Pages
|
||||||
|
|
||||||
on:
|
on:
|
||||||
# Runs on pushes targeting the main branch
|
# Runs on pushes targeting the default branch
|
||||||
push:
|
push:
|
||||||
branches:
|
branches: [develop]
|
||||||
- main
|
paths:
|
||||||
|
- "sites/promo/**"
|
||||||
|
- "package.json"
|
||||||
|
- "pnpm-lock.yaml"
|
||||||
|
- "pnpm-workspace.yaml"
|
||||||
|
- ".github/workflows/pages.yml"
|
||||||
|
|
||||||
# Allows you to run this workflow manually from the Actions tab
|
# Allows you to run this workflow manually from the Actions tab
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
@@ -15,11 +20,10 @@ permissions:
|
|||||||
pages: write
|
pages: write
|
||||||
id-token: write
|
id-token: write
|
||||||
|
|
||||||
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
|
# Allow only one concurrent deployment per the "pages" group, skipping runs queued
|
||||||
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
|
# between the in-progress run and the latest queued one. cancel-in-progress defaults
|
||||||
concurrency:
|
# to false, so in-flight production deployments are allowed to complete.
|
||||||
group: "pages"
|
concurrency: "pages"
|
||||||
cancel-in-progress: false
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@@ -28,20 +32,21 @@ jobs:
|
|||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v4
|
- name: Install pnpm
|
||||||
name: Install pnpm
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
version: 10
|
|
||||||
run_install: false
|
run_install: false
|
||||||
|
|
||||||
- name: Install Node.js
|
- name: Install Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 22
|
node-version: "22"
|
||||||
cache: 'pnpm'
|
cache: "pnpm"
|
||||||
|
|
||||||
|
# Only install the promo site (radiant) and its dependencies so the public
|
||||||
|
# website deploy stays decoupled from the server/desktop build pipelines.
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install --filter radiant...
|
||||||
|
|
||||||
- name: Setup Pages
|
- name: Setup Pages
|
||||||
id: setup_pages
|
id: setup_pages
|
||||||
@@ -51,14 +56,15 @@ jobs:
|
|||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
.next/cache
|
sites/promo/.next/cache
|
||||||
# Generate a new cache whenever packages or source files change.
|
# Generate a new cache whenever packages or source files change.
|
||||||
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
|
key: ${{ runner.os }}-nextjs-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('sites/promo/**.[jt]s', 'sites/promo/**.[jt]sx') }}
|
||||||
# If source files changed but packages didn't, rebuild from a prior cache.
|
# If source files changed but packages didn't, rebuild from a prior cache.
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-nextjs-${{ hashFiles('**/pnpm-lock.yaml') }}-
|
${{ runner.os }}-nextjs-${{ hashFiles('pnpm-lock.yaml') }}-
|
||||||
|
|
||||||
- name: Build with Next.js
|
- name: Build with Next.js
|
||||||
|
working-directory: sites/promo
|
||||||
run: pnpm run build
|
run: pnpm run build
|
||||||
env:
|
env:
|
||||||
PAGES_BASE_PATH: ${{ steps.setup_pages.outputs.base_path }}
|
PAGES_BASE_PATH: ${{ steps.setup_pages.outputs.base_path }}
|
||||||
@@ -66,7 +72,7 @@ jobs:
|
|||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-pages-artifact@v3
|
uses: actions/upload-pages-artifact@v3
|
||||||
with:
|
with:
|
||||||
path: ./out
|
path: sites/promo/out
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
environment:
|
environment:
|
||||||
@@ -77,4 +83,4 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Deploy to GitHub Pages
|
- name: Deploy to GitHub Pages
|
||||||
id: deployment
|
id: deployment
|
||||||
uses: actions/deploy-pages@v4
|
uses: actions/deploy-pages@v4
|
||||||
@@ -1,12 +1,24 @@
|
|||||||
name: CI
|
name: Server CI
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches: [develop]
|
||||||
- develop
|
paths:
|
||||||
|
- "server/**"
|
||||||
|
- "libraries/base/**"
|
||||||
|
- "package.json"
|
||||||
|
- "pnpm-lock.yaml"
|
||||||
|
- "pnpm-workspace.yaml"
|
||||||
|
- ".github/workflows/server-ci.yml"
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches: [develop]
|
||||||
- develop
|
paths:
|
||||||
|
- "server/**"
|
||||||
|
- "libraries/base/**"
|
||||||
|
- "package.json"
|
||||||
|
- "pnpm-lock.yaml"
|
||||||
|
- "pnpm-workspace.yaml"
|
||||||
|
- ".github/workflows/server-ci.yml"
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
@@ -18,8 +30,6 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Check out the repo
|
- name: Check out the repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
@@ -34,6 +44,7 @@ jobs:
|
|||||||
run: pnpm install
|
run: pnpm install
|
||||||
|
|
||||||
- name: Typecheck
|
- name: Typecheck
|
||||||
|
working-directory: server
|
||||||
run: pnpm run typecheck
|
run: pnpm run typecheck
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
@@ -42,8 +53,6 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Check out the repo
|
- name: Check out the repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
@@ -58,4 +67,5 @@ jobs:
|
|||||||
run: pnpm install
|
run: pnpm install
|
||||||
|
|
||||||
- name: Lint
|
- name: Lint
|
||||||
|
working-directory: server
|
||||||
run: pnpm run lint
|
run: pnpm run lint
|
||||||
-31
@@ -1,31 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug report
|
|
||||||
about: Create a report to help us improve
|
|
||||||
title: "[BUG]"
|
|
||||||
labels: ''
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Describe the bug**
|
|
||||||
A clear and concise description of what the bug is.
|
|
||||||
|
|
||||||
**To Reproduce**
|
|
||||||
Steps to reproduce the behavior:
|
|
||||||
1. Go to '...'
|
|
||||||
2. Click on '....'
|
|
||||||
3. Scroll down to '....'
|
|
||||||
4. See error
|
|
||||||
|
|
||||||
**Expected behavior**
|
|
||||||
A clear and concise description of what you expected to happen.
|
|
||||||
|
|
||||||
**Screenshots**
|
|
||||||
If applicable, add screenshots to help explain your problem.
|
|
||||||
|
|
||||||
**Desktop (please complete the following information):**
|
|
||||||
- OS: [e.g. Arch Linux, Windows]
|
|
||||||
- App Version [e.g. 22]
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context about the problem here.
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
---
|
|
||||||
name: Feature request
|
|
||||||
about: Suggest an idea for this project
|
|
||||||
title: ''
|
|
||||||
labels: ''
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
|
||||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
|
||||||
A clear and concise description of what you want to happen.
|
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
|
||||||
A clear and concise description of any alternative solutions or features you've considered.
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context or screenshots about the feature request here.
|
|
||||||
-128
@@ -1,128 +0,0 @@
|
|||||||
name: "publish"
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch: {}
|
|
||||||
release:
|
|
||||||
types: [published]
|
|
||||||
# This can be used to automatically publish nightlies at UTC nighttime
|
|
||||||
# schedule:
|
|
||||||
# - cron: "0 2 * * *" # run at 2 AM UTC
|
|
||||||
|
|
||||||
# This workflow will trigger on each push to the `release` branch to create or update a GitHub release, build your app, and upload the artifacts to the release.
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish-tauri:
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- platform: "macos-14" # for Arm based macs (M1 and above).
|
|
||||||
args: "--target aarch64-apple-darwin"
|
|
||||||
- platform: "macos-14" # for Intel based macs.
|
|
||||||
args: "--target x86_64-apple-darwin"
|
|
||||||
- platform: "ubuntu-22.04" # for Tauri v1 you could replace this with ubuntu-20.04.
|
|
||||||
args: ""
|
|
||||||
- platform: "ubuntu-22.04-arm"
|
|
||||||
args: "--target aarch64-unknown-linux-gnu"
|
|
||||||
- platform: "windows-latest"
|
|
||||||
args: ""
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.platform }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: setup pnpm
|
|
||||||
uses: pnpm/action-setup@v4
|
|
||||||
with:
|
|
||||||
version: 10
|
|
||||||
run_install: false
|
|
||||||
|
|
||||||
- name: setup node
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: lts/*
|
|
||||||
cache: pnpm
|
|
||||||
|
|
||||||
|
|
||||||
- name: install Rust nightly
|
|
||||||
uses: dtolnay/rust-toolchain@nightly
|
|
||||||
with:
|
|
||||||
# Those targets are only used on macos runners so it's in an `if` to slightly speed up windows and linux builds.
|
|
||||||
targets: ${{ matrix.platform == 'macos-14' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
|
|
||||||
|
|
||||||
- name: Rust cache
|
|
||||||
uses: swatinem/rust-cache@v2
|
|
||||||
with:
|
|
||||||
workspaces: './src-tauri -> target'
|
|
||||||
|
|
||||||
- name: install dependencies (ubuntu only)
|
|
||||||
if: matrix.platform == 'ubuntu-22.04' || matrix.platform == 'ubuntu-22.04-arm' # This must match the platform value defined above.
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf xdg-utils
|
|
||||||
# webkitgtk 4.0 is for Tauri v1 - webkitgtk 4.1 is for Tauri v2.
|
|
||||||
|
|
||||||
- name: Import Apple Developer Certificate
|
|
||||||
if: matrix.platform == 'macos-14'
|
|
||||||
env:
|
|
||||||
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
|
|
||||||
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
|
||||||
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
|
|
||||||
run: |
|
|
||||||
echo $APPLE_CERTIFICATE | base64 --decode > certificate.p12
|
|
||||||
security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
|
|
||||||
security default-keychain -s build.keychain
|
|
||||||
security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
|
|
||||||
security set-keychain-settings -t 3600 -u build.keychain
|
|
||||||
|
|
||||||
|
|
||||||
echo "Created keychain"
|
|
||||||
|
|
||||||
curl https://droposs.org/drop.der --output drop.der
|
|
||||||
|
|
||||||
# swiftc libs/appletrust/add-certificate.swift
|
|
||||||
# ./add-certificate drop.der
|
|
||||||
# rm add-certificate
|
|
||||||
|
|
||||||
# echo "Added certificate to keychain using swift util"
|
|
||||||
|
|
||||||
## Script is equivalent to:
|
|
||||||
sudo security authorizationdb write com.apple.trust-settings.admin allow
|
|
||||||
sudo security add-trusted-cert -d -r trustRoot -k build.keychain -p codeSign -u -1 drop.der
|
|
||||||
sudo security authorizationdb remove com.apple.trust-settings.admin
|
|
||||||
|
|
||||||
security import certificate.p12 -k build.keychain -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign
|
|
||||||
echo "Imported certificate"
|
|
||||||
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" build.keychain
|
|
||||||
security find-identity -v -p codesigning build.keychain
|
|
||||||
|
|
||||||
- name: Verify Certificate
|
|
||||||
if: matrix.platform == 'macos-14'
|
|
||||||
run: |
|
|
||||||
CERT_INFO=$(security find-identity -v -p codesigning build.keychain | grep "Drop OSS")
|
|
||||||
CERT_ID=$(echo "$CERT_INFO" | awk -F'"' '{print $2}')
|
|
||||||
echo "CERT_ID=$CERT_ID" >> $GITHUB_ENV
|
|
||||||
echo "Certificate imported. Using identity: $CERT_ID"
|
|
||||||
|
|
||||||
- name: install frontend dependencies
|
|
||||||
run: pnpm install # change this to npm, pnpm or bun depending on which one you use.
|
|
||||||
|
|
||||||
- uses: tauri-apps/tauri-action@v0
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
|
|
||||||
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
|
||||||
APPLE_SIGNING_IDENTITY: ${{ env.CERT_ID }}
|
|
||||||
NO_STRIP: true
|
|
||||||
with:
|
|
||||||
tagName: v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version.
|
|
||||||
releaseName: "Auto-release v__VERSION__"
|
|
||||||
releaseBody: "See the assets to download this version and install. This release was created automatically."
|
|
||||||
releaseDraft: false
|
|
||||||
prerelease: true
|
|
||||||
args: ${{ matrix.args }}
|
|
||||||
-53
@@ -1,53 +0,0 @@
|
|||||||
name: Rust CI
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ main, master ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ main, master ]
|
|
||||||
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
name: Build, Test, Lint
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
fetch-depth: 3 # fix for when this gets triggered by tag
|
|
||||||
fetch-tags: true
|
|
||||||
ref: ${{ github.ref }}
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Install Rust toolchain
|
|
||||||
uses: dtolnay/rust-toolchain@nightly
|
|
||||||
with:
|
|
||||||
components: rustfmt, clippy
|
|
||||||
|
|
||||||
- name: Cache cargo registry
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
~/.cargo/registry
|
|
||||||
~/.cargo/git
|
|
||||||
target
|
|
||||||
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
|
||||||
|
|
||||||
- name: Install libarchive
|
|
||||||
run: |
|
|
||||||
sudo apt-get install libarchive-dev -y
|
|
||||||
|
|
||||||
|
|
||||||
- name: Check formatting
|
|
||||||
run: cargo fmt --all -- --check
|
|
||||||
|
|
||||||
- name: Run Clippy (lint)
|
|
||||||
run: cargo clippy --all-targets --all-features -- -D warnings
|
|
||||||
|
|
||||||
- name: Run tests
|
|
||||||
run: cargo test --all-features --all --verbose
|
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
#![deny(clippy::all)]
|
#![deny(clippy::all)]
|
||||||
#![feature(impl_trait_in_bindings)]
|
#![feature(impl_trait_in_bindings)]
|
||||||
#![feature(nonpoison_mutex)]
|
|
||||||
#![feature(sync_nonpoison)]
|
|
||||||
pub mod file_utils;
|
pub mod file_utils;
|
||||||
pub mod manifest;
|
pub mod manifest;
|
||||||
pub mod ssl;
|
pub mod ssl;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use std::{env, path::PathBuf};
|
use std::{env, path::PathBuf};
|
||||||
|
|
||||||
use droplet_rs::manifest::{ManifestWriterFactory, generate_manifest_rusty};
|
use droplet_rs::manifest::{generate_manifest_rusty, ManifestWriterFactory};
|
||||||
use tokio::runtime::Handle;
|
use tokio::runtime::Handle;
|
||||||
|
|
||||||
struct SinkFactory {}
|
struct SinkFactory {}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ use std::{collections::HashMap, ops::Not, path::Path};
|
|||||||
|
|
||||||
use anyhow::anyhow;
|
use anyhow::anyhow;
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
|
pub use droplet_types::{ChunkData, FileEntry, Manifest};
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
use hex::ToHex as _;
|
use hex::ToHex as _;
|
||||||
use humansize::{format_size, BINARY};
|
use humansize::{format_size, BINARY};
|
||||||
@@ -9,8 +10,6 @@ use sha2::{Digest as _, Sha256};
|
|||||||
use tokio::io::AsyncWriteExt;
|
use tokio::io::AsyncWriteExt;
|
||||||
use tokio::io::{AsyncReadExt as _, AsyncWrite};
|
use tokio::io::{AsyncReadExt as _, AsyncWrite};
|
||||||
use tokio::sync::Semaphore;
|
use tokio::sync::Semaphore;
|
||||||
pub use droplet_types::{ChunkData, FileEntry, Manifest};
|
|
||||||
|
|
||||||
|
|
||||||
pub const CHUNK_SIZE: u64 = 1024 * 1024 * 64;
|
pub const CHUNK_SIZE: u64 = 1024 * 1024 * 64;
|
||||||
pub const MAX_FILE_COUNT: usize = 512;
|
pub const MAX_FILE_COUNT: usize = 512;
|
||||||
@@ -44,7 +43,7 @@ where
|
|||||||
"Could not create backend for path. Is this structure supported?"
|
"Could not create backend for path. Is this structure supported?"
|
||||||
))?()?;
|
))?()?;
|
||||||
let mut files = backend.list_files().await?;
|
let mut files = backend.list_files().await?;
|
||||||
files.sort_by(|a, b| b.size.cmp(&a.size));
|
files.sort_by_key(|b| std::cmp::Reverse(b.size));
|
||||||
|
|
||||||
log_sfn("organising files into chunks...".to_string());
|
log_sfn("organising files into chunks...".to_string());
|
||||||
|
|
||||||
|
|||||||
@@ -34,9 +34,11 @@ const SUPPORTED_FILE_EXTENSIONS: [&str; 11] = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
pub mod types;
|
pub mod types;
|
||||||
pub fn create_backend_constructor<'a, P>(
|
|
||||||
path: P,
|
type BackendConstructor<'a> =
|
||||||
) -> Option<Box<dyn FnOnce() -> Result<Box<dyn VersionBackend + Send + Sync + 'a>>>>
|
Box<dyn FnOnce() -> Result<Box<dyn VersionBackend + Send + Sync + 'a>>>;
|
||||||
|
|
||||||
|
pub fn create_backend_constructor<'a, P>(path: P) -> Option<BackendConstructor<'a>>
|
||||||
where
|
where
|
||||||
P: AsRef<Path>,
|
P: AsRef<Path>,
|
||||||
{
|
{
|
||||||
@@ -53,7 +55,7 @@ where
|
|||||||
}));
|
}));
|
||||||
};
|
};
|
||||||
|
|
||||||
let file_extension = path.extension().map(|v| v.to_str()).flatten()?;
|
let file_extension = path.extension().and_then(|v| v.to_str())?;
|
||||||
if SUPPORTED_FILE_EXTENSIONS.contains(&file_extension) {
|
if SUPPORTED_FILE_EXTENSIONS.contains(&file_extension) {
|
||||||
let buf = path.to_path_buf();
|
let buf = path.to_path_buf();
|
||||||
return Some(Box::new(move || Ok(Box::new(ZipVersionBackend::new(buf)?))));
|
return Some(Box::new(move || Ok(Box::new(ZipVersionBackend::new(buf)?))));
|
||||||
|
|||||||
@@ -24,4 +24,3 @@ pub struct Manifest {
|
|||||||
pub size: u64,
|
pub size: u64,
|
||||||
pub key: [u8; 16],
|
pub key: [u8; 16],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Vendored
-158
@@ -1,158 +0,0 @@
|
|||||||
name: Release Workflow
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch: {}
|
|
||||||
release:
|
|
||||||
types: [published]
|
|
||||||
# This can be used to automatically publish nightlies at UTC nighttime
|
|
||||||
schedule:
|
|
||||||
- cron: "0 2 * * *" # run at 2 AM UTC
|
|
||||||
|
|
||||||
env:
|
|
||||||
REGISTRY_IMAGE: ghcr.io/drop-oss/drop
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- platform: linux/amd64
|
|
||||||
runner: ubuntu-latest
|
|
||||||
- platform: linux/arm64
|
|
||||||
runner: ubuntu-24.04-arm
|
|
||||||
runs-on: ${{ matrix.runner }}
|
|
||||||
permissions:
|
|
||||||
packages: write
|
|
||||||
contents: read
|
|
||||||
steps:
|
|
||||||
- name: Check out the repo
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
fetch-depth: 3 # fix for when this gets triggered by tag
|
|
||||||
fetch-tags: true
|
|
||||||
ref: ${{ github.ref }}
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Prepare
|
|
||||||
run: |
|
|
||||||
platform=${{ matrix.platform }}
|
|
||||||
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Docker meta
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v5
|
|
||||||
with:
|
|
||||||
images: ${{ env.REGISTRY_IMAGE }}
|
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
registry: ghcr.io
|
|
||||||
username: ${{ github.actor }}
|
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
|
|
||||||
- name: Determine final version
|
|
||||||
id: get_final_ver
|
|
||||||
run: |
|
|
||||||
BASE_VER=v$(jq -r '.version' package.json)
|
|
||||||
TODAY=$(date +'%Y.%m.%d')
|
|
||||||
|
|
||||||
echo "Today will be: $TODAY"
|
|
||||||
echo "today=$TODAY" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
if [[ "${{ github.event_name }}" == "release" ]]; then
|
|
||||||
FINAL_VER="$BASE_VER"
|
|
||||||
else
|
|
||||||
FINAL_VER="${BASE_VER}-nightly.$TODAY"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Drop's release tag will be: $FINAL_VER"
|
|
||||||
echo "final_ver=$FINAL_VER" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Build and push by digest
|
|
||||||
id: build
|
|
||||||
uses: docker/build-push-action@v6
|
|
||||||
with:
|
|
||||||
platforms: ${{ matrix.platform }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
tags: ${{ env.REGISTRY_IMAGE }}
|
|
||||||
outputs: type=image,push-by-digest=true,name-canonical=true,push=true
|
|
||||||
provenance: mode=max
|
|
||||||
sbom: true
|
|
||||||
build-args: |
|
|
||||||
BUILD_DROP_VERSION=${{ steps.get_final_ver.outputs.final_ver }}
|
|
||||||
BUILD_GIT_REF=${{ github.sha }}
|
|
||||||
|
|
||||||
- name: Export digest
|
|
||||||
run: |
|
|
||||||
mkdir -p ${{ runner.temp }}/digests
|
|
||||||
digest="${{ steps.build.outputs.digest }}"
|
|
||||||
touch "${{ runner.temp }}/digests/${digest#sha256:}"
|
|
||||||
|
|
||||||
- name: Upload digest
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: digests-${{ env.PLATFORM_PAIR }}
|
|
||||||
path: ${{ runner.temp }}/digests/*
|
|
||||||
if-no-files-found: error
|
|
||||||
retention-days: 1
|
|
||||||
|
|
||||||
merge:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs:
|
|
||||||
- build
|
|
||||||
permissions:
|
|
||||||
packages: write
|
|
||||||
contents: read
|
|
||||||
steps:
|
|
||||||
- name: Download digests
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
path: ${{ runner.temp }}/digests
|
|
||||||
pattern: digests-*
|
|
||||||
merge-multiple: true
|
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
registry: ghcr.io
|
|
||||||
username: ${{ github.actor }}
|
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
- name: Extract metadata (tags, labels) for Docker
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v5
|
|
||||||
with:
|
|
||||||
images: |
|
|
||||||
ghcr.io/drop-OSS/drop
|
|
||||||
tags: |
|
|
||||||
type=schedule,pattern=nightly
|
|
||||||
type=schedule,pattern=nightly.${{ steps.get_final_ver.outputs.today }}
|
|
||||||
type=semver,pattern=v{{version}}
|
|
||||||
type=semver,pattern=v{{major}}.{{minor}}
|
|
||||||
type=semver,pattern=v{{major}}
|
|
||||||
type=ref,event=branch,prefix=branch-
|
|
||||||
type=ref,event=pr
|
|
||||||
type=sha
|
|
||||||
# set latest tag for stable releases
|
|
||||||
type=raw,value=latest,enable=${{ github.event_name == 'release' && github.event.release.prerelease == false }}
|
|
||||||
|
|
||||||
- name: Create manifest list and push
|
|
||||||
working-directory: ${{ runner.temp }}/digests
|
|
||||||
run: |
|
|
||||||
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
|
|
||||||
$(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
|
|
||||||
|
|
||||||
- name: Inspect image
|
|
||||||
run: |
|
|
||||||
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}
|
|
||||||
Reference in New Issue
Block a user