version: 3
vars:
VERSION: 0.2.1
tasks:
status:
desc: Show version and status
cmds:
- 'grep "^version" Cargo.toml'
- 'git status --short'
login-npm:
desc: Login to npm from .env
cmds:
- cmd: 'node -e "const os=require(\"os\");const fs=require(\"fs\");const lines=fs.readFileSync(\".env\",\"utf8\").split(/\\r?\\n/);const line=lines.find(l=>l.startsWith(\"NPM_TOKEN=\"));if(line){const t=line.split(\"=\")[1];fs.writeFileSync(os.homedir()+\"/.npmrc\",\"//registry.npmjs.org/:_authToken=\"+t)}"'
- cmd: 'npm whoami'
login-cargo:
desc: Login to cargo from .env
cmds:
- cmd: 'node -e "const os=require(\"os\");const fs=require(\"fs\");const lines=fs.readFileSync(\".env\",\"utf8\").split(/\\r?\\n/);const line=lines.find(l=>l.startsWith(\"CARGO_TOKEN=\"));if(line){const t=line.split(\"=\")[1];fs.writeFileSync(os.homedir()+\"/.cargo/credentials.toml\",\"[registry]\\ntoken = \\\"\"+t+\"\\\"\")}"'
login:
desc: Login to npm and cargo
cmds:
- task: login-npm
- task: login-cargo
bump:
desc: Bump all versions (task bump -- 0.2.4)
cmds:
- cmd: 'node -e "const fs=require(\"fs\");const v=\"{{.CLI_ARGS}}\";const c=fs.readFileSync(\"Cargo.toml\",\"utf8\").replace(/^version = .*/m,\"version = \\\"\"+v+\"\\\"\");fs.writeFileSync(\"Cargo.toml\",c)"'
- cmd: 'node -e "const fs=require(\"fs\");const v=\"{{.CLI_ARGS}}\";const p=JSON.parse(fs.readFileSync(\"npm/package.json\"));p.version=v;fs.writeFileSync(\"npm/package.json\",JSON.stringify(p,null,2))"'
- cmd: 'echo "Bumped to {{.CLI_ARGS}}"'
tag:
desc: Create git tag (task tag -- 0.2.4)
cmds:
- 'git add Cargo.toml npm/package.json Cargo.lock'
- 'git commit -m "chore: bump to {{.CLI_ARGS}}"'
- 'git tag {{.CLI_ARGS}}'
- 'git push origin dev'
- 'git push origin {{.CLI_ARGS}}'
publish-npm:
desc: Publish to npm
dir: npm
cmds:
- task: login-npm
- 'cp ../LICENSE .'
- 'npm publish --access=public'
publish-cargo:
desc: Publish to cargo
cmds:
- task: login-cargo
- 'cargo publish --registry crates-io'
publish:
desc: Auto bump version and publish
cmds:
- cmd: 'node -e "const fs=require(\"fs\");const c=fs.readFileSync(\"Cargo.toml\",\"utf8\");const m=c.match(/^version = \"([^\"]+)\"/m);if(m){const p=m[1].split(\".\");p[2]=parseInt(p[2])+1;const nv=p.join(\".\");fs.writeFileSync(\"Cargo.toml\",c.replace(/^version = .*/m,\"version = \\\"\"+nv+\"\\\"\"));const pkg=JSON.parse(fs.readFileSync(\"npm/package.json\"));pkg.version=nv;fs.writeFileSync(\"npm/package.json\",JSON.stringify(pkg,null,2));console.log(\"New version: \"+nv)}"'
- cmd: 'node -e "const fs=require(\"fs\");const execSync=require(\"child_process\").execSync;const c=fs.readFileSync(\"Cargo.toml\",\"utf8\");const m=c.match(/^version = \"([^\"]+)\"/m);if(m){const v=m[1];execSync(\"cargo update -w\");execSync(\"git add Cargo.toml npm/package.json Cargo.lock\");execSync(\"git commit -m \\\"chore: bump to \"+v+\"\\\"\");execSync(\"git tag \"+v);execSync(\"git push origin dev\");execSync(\"git push origin \"+v)}"'
- task: login
- task: publish-npm
- task: publish-cargo
release:
desc: Full release workflow (task release -- 0.2.4)
cmds:
- task: login
- task: bump
vars: {CLI_ARGS: '{{.CLI_ARGS}}'}
- task: tag
vars: {CLI_ARGS: '{{.CLI_ARGS}}'}
- 'sleep 30'
- task: publish-npm
- task: publish-cargo
build:
desc: Build release
cmds:
- 'cargo build --release'
test:
desc: Run tests
cmds:
- 'cargo test'
default:
desc: List tasks
cmds:
- 'task --list'