@ship.zone/szci
Serve Zone CI - A powerful CI/CD tool for streamlining Node.js and Docker workflows within CI environments (GitLab CI, GitHub CI, Gitea CI). Now powered by Deno with standalone executables.
✨ Features
- 🚀 Standalone Executables - No Node.js installation required
- 🐳 Docker Integration - Build, tag, and push Docker images
- 📦 NPM Management - Install, test, and publish npm packages
- 🔧 Node.js Version Management - Install and switch between Node versions
- 🔐 SSH Key Management - Deploy SSH keys from environment variables
- ☁️ Multi-Registry Support - Push to multiple Docker registries
- 🎯 Cross-Platform - Binaries for Linux, macOS, and Windows
📥 Installation
NPM (Recommended)
npm install -g @ship.zone/szci
The package will automatically download the appropriate pre-compiled binary for your platform.
From Source (Deno Required)
git clone https://code.foss.global/ship.zone/szci.git
cd szci
deno task compile
🚀 Quick Start
# Install Node.js
szci node install stable
# Install dependencies
szci npm install
# Build Docker images
szci docker build
# Run tests
szci npm test
# Push Docker images
szci docker push registry.example.com
📖 Usage
Node.js Management
# Install specific Node.js version
szci node install lts
szci node install stable
szci node install 18
# Install from .nvmrc
szci node install legacy
NPM Commands
# Install dependencies
szci npm install
# Run tests
szci npm test
# Publish package
szci npm publish
Docker Workflows
# Prepare Docker environment
szci docker prepare
# Build all Dockerfiles
szci docker build
# Push to registry
szci docker push registry.example.com
# Pull from registry
szci docker pull registry.example.com
# Test Dockerfiles
szci docker test
SSH Key Management
# Deploy SSH keys from environment
szci ssh prepare
Set environment variables like NPMCI_SSHKEY_1, NPMCI_SSHKEY_2, etc.
🔧 CI/CD Integration
GitLab CI
image: denoland/deno:alpine
stages:
- prepare
- build
- test
- deploy
variables:
SZCI_VERSION: "latest"
before_script:
- deno install --allow-all --global --name szci https://code.foss.global/ship.zone/szci/raw/branch/master/mod.ts
# OR use the npm package:
# - npm install -g @ship.zone/szci
prepare:
stage: prepare
script:
- szci node install stable
- szci npm install
build:
stage: build
script:
- szci docker build
test:
stage: test
script:
- szci npm test
deploy:
stage: deploy
script:
- szci docker push $CI_REGISTRY
only:
- master
GitHub Actions
name: CI Pipeline
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install SZCI
run: npm install -g @ship.zone/szci
- name: Setup Node.js
run: szci node install stable
- name: Install Dependencies
run: szci npm install
- name: Build Docker Images
run: szci docker build
- name: Run Tests
run: szci npm test
- name: Push Images
if: github.ref == 'refs/heads/main'
run: szci docker push ghcr.io
⚙️ Configuration
Create an npmextra.json file in your project root:
{
"npmci": {
"npmGlobalTools": [],
"npmAccessLevel": "public",
"npmRegistryUrl": "registry.npmjs.org",
"dockerRegistries": [
"registry.gitlab.com"
],
"dockerRegistryRepoMap": {
"registry.gitlab.com": "mygroup/myrepo"
},
"dockerBuildargEnvMap": {
"ARG_NAME": "ENV_VAR_NAME"
}
}
}
🐳 Docker Registry Authentication
SZCI supports automatic authentication with:
- GitLab CI Registry (via
CI_JOB_TOKEN) - Custom registries via environment variables
Set NPMCI_LOGIN_DOCKER* environment variables:
NPMCI_LOGIN_DOCKER_1="registry.example.com|username|password"
NPMCI_LOGIN_DOCKER_2="another-registry.com|user2|pass2"
🏗️ Development
Prerequisites
- Deno 1.40+ installed
Building from Source
# Clone the repository
git clone https://code.foss.global/ship.zone/szci.git
cd szci
# Compile for all platforms
deno task compile
# Compile for current platform only
deno compile --allow-all --output szci mod.ts
# Run tests
deno task test
# Development mode
deno task dev --help
Testing
Tests will be migrated to Deno's native test framework:
deno task test
📦 Binary Sizes
The standalone executables are approximately:
- Linux x64: ~800MB
- Linux ARM64: ~800MB
- macOS x64: ~796MB
- macOS ARM64: ~796MB
- Windows x64: ~804MB
Sizes include all dependencies and the Deno runtime.
🔄 Migration from npmci
If you're upgrading from the old @ship.zone/npmci package:
-
Update package references:
npm uninstall -g @ship.zone/npmci npm install -g @ship.zone/szci -
Update CI configuration files - replace
npmciwithszci -
The command interface remains the same, only the binary name changed
📝 License
MIT © Lossless GmbH
🔗 Links
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Built with Deno 🦕