mirror of
https://github.com/ivabus/pantry
synced 2024-11-22 16:35:07 +03:00
rework for single pantry (#497)
* rework for single pantry * a few things missed
This commit is contained in:
parent
e7fc6d75a8
commit
11ca7336d7
19 changed files with 658 additions and 21 deletions
7
.github/NEW_VERSION_ISSUE_TEMPLATE.md
vendored
Normal file
7
.github/NEW_VERSION_ISSUE_TEMPLATE.md
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
title: "new release: {{env.PACKAGE}} failed"
|
||||
assignees: jhheider
|
||||
labels: bug
|
||||
---
|
||||
A new-version run for the {{env.PACKAGE}} release. Review the failure
|
||||
<a href="{{env.URL}}">here</a> and mitigate.
|
23
.github/deno.jsonc
vendored
Normal file
23
.github/deno.jsonc
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"allowJs": false,
|
||||
"strict": true
|
||||
},
|
||||
"tasks": {
|
||||
"typecheck": "deno check --unstable scripts/*.ts"
|
||||
// ^^ doesn't work yet due to lack of glob support
|
||||
},
|
||||
"fmt": {
|
||||
"files": {
|
||||
"exclude": [
|
||||
"./"
|
||||
]
|
||||
}
|
||||
},
|
||||
"tea": {
|
||||
"dependencies": {
|
||||
"deno.land": "^1.30"
|
||||
}
|
||||
},
|
||||
"importMap": "https://raw.githubusercontent.com/teaxyz/cli/v0.23/import-map.json"
|
||||
}
|
33
.github/scripts/index-packages.ts
vendored
Executable file
33
.github/scripts/index-packages.ts
vendored
Executable file
|
@ -0,0 +1,33 @@
|
|||
#!/usr/bin/env -S tea -E deno run --allow-read --allow-env --allow-net --allow-sys
|
||||
|
||||
import { usePantry } from "hooks"
|
||||
import * as ARGV from "./utils/args.ts"
|
||||
import { SQSClient, SendMessageCommand } from "npm:@aws-sdk/client-sqs@^3"
|
||||
import { panic } from "utils"
|
||||
|
||||
const sqsClient = new SQSClient({ region: Deno.env.get("AWS_REGION") ?? panic("No region specified") })
|
||||
const pantry = usePantry()
|
||||
|
||||
const pkgs = await ARGV.toArray(ARGV.pkgs())
|
||||
for(const pkg of pkgs) {
|
||||
try {
|
||||
const yml = await pantry.getYAML(pkg).parse()
|
||||
|
||||
const project = pkg.project
|
||||
|
||||
const taskMessage = {
|
||||
project,
|
||||
github: yml?.versions?.github || "",
|
||||
// TODO: add other useable data here eventually
|
||||
}
|
||||
const res = await sqsClient.send(new SendMessageCommand({
|
||||
MessageGroupId: 'project',
|
||||
MessageDeduplicationId: project,
|
||||
MessageBody: JSON.stringify(taskMessage),
|
||||
QueueUrl: Deno.env.get("SQS_GENERATE_PACKAGE_DETAILS_URL")!,
|
||||
}))
|
||||
console.log(`SQS task for pkg:${project} messageId:${res.MessageId}`)
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
}
|
41
.github/scripts/map-projects-to-githubs.ts
vendored
Executable file
41
.github/scripts/map-projects-to-githubs.ts
vendored
Executable file
|
@ -0,0 +1,41 @@
|
|||
#!/usr/bin/env tea
|
||||
|
||||
/*---
|
||||
args:
|
||||
- deno
|
||||
- run
|
||||
- --allow-read
|
||||
- --allow-env
|
||||
- --allow-net
|
||||
---*/
|
||||
|
||||
import { usePantry } from "hooks"
|
||||
import { panic } from "utils"
|
||||
import * as semver from "semver"
|
||||
|
||||
const url = Deno.env.get("WATCHER_URL") ?? panic("missing $WATCHER_URL")
|
||||
const token = Deno.env.get("TEA_API_TOKEN") ?? panic("missing $TEA_API_TOKEN")
|
||||
|
||||
const pantry = usePantry()
|
||||
|
||||
const rv: Set<{project: string, github: string}> = new Set()
|
||||
|
||||
for await (const {project} of pantry.ls()) {
|
||||
const yml = await pantry.getYAML({project, constraint: new semver.Range('*') }).parse()
|
||||
if (yml?.versions?.github) {
|
||||
const github = yml.versions.github.split('/').slice(0, 2).join('/')
|
||||
rv.add({ project, github })
|
||||
}
|
||||
}
|
||||
|
||||
const options = {
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': `bearer ${token}`,
|
||||
},
|
||||
body: JSON.stringify([...rv]),
|
||||
}
|
||||
|
||||
console.log(rv)
|
||||
await fetch(url, options)
|
59
.github/scripts/utils/args.ts
vendored
Normal file
59
.github/scripts/utils/args.ts
vendored
Normal file
|
@ -0,0 +1,59 @@
|
|||
import { Installation, Package, PackageRequirement } from "types"
|
||||
import { useCellar } from "hooks"
|
||||
import { parse } from "utils/pkg.ts"
|
||||
|
||||
/// processes Deno.args unless STDIN is not a TTY and has input
|
||||
export async function *args(): AsyncGenerator<string> {
|
||||
if (Deno.isatty(Deno.stdin.rid)) {
|
||||
for (const arg of Deno.args) {
|
||||
if (arg[0] != '-') yield arg
|
||||
}
|
||||
} else {
|
||||
let yielded_something = false
|
||||
const buf = new Uint8Array(10)
|
||||
const decode = (() => { const d = new TextDecoder(); return d.decode.bind(d) })()
|
||||
let n: number | null
|
||||
let txt = ''
|
||||
const rx = /\s*(.*?)\s+/
|
||||
while ((n = await Deno.stdin.read(buf)) !== null) {
|
||||
txt += decode(buf.subarray(0, n))
|
||||
while (true) {
|
||||
const match = txt.match(rx)
|
||||
if (!match) break
|
||||
yield match[1]
|
||||
txt = txt.slice(match[0].length)
|
||||
yielded_something = true
|
||||
}
|
||||
}
|
||||
if (txt) {
|
||||
yield txt
|
||||
} else if (!yielded_something) {
|
||||
for (const arg of Deno.args) {
|
||||
yield arg
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export async function *pkgs(): AsyncGenerator<Package | PackageRequirement> {
|
||||
for await (const arg of args()) {
|
||||
const match = arg.match(/projects\/(.*)\/package.yml/)
|
||||
const project = match ? match[1] : arg
|
||||
yield parse(project)
|
||||
}
|
||||
}
|
||||
|
||||
export async function *installs(): AsyncGenerator<Installation> {
|
||||
const cellar = useCellar()
|
||||
for await (const pkg of pkgs()) {
|
||||
yield await cellar.resolve(pkg)
|
||||
}
|
||||
}
|
||||
|
||||
export async function toArray<T>(input: AsyncGenerator<T>) {
|
||||
const rv: T[] = []
|
||||
for await (const i of input) {
|
||||
rv.push(i)
|
||||
}
|
||||
return rv
|
||||
}
|
166
.github/workflows/bottle.yml
vendored
Normal file
166
.github/workflows/bottle.yml
vendored
Normal file
|
@ -0,0 +1,166 @@
|
|||
name: bottle
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
new-version:
|
||||
type: boolean
|
||||
required: false
|
||||
default: false
|
||||
platform:
|
||||
required: true
|
||||
type: string
|
||||
outputs:
|
||||
pr:
|
||||
description: 'The PR number'
|
||||
value: ${{ jobs.bottle.outputs.pr }}
|
||||
|
||||
jobs:
|
||||
get-platform:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
os: ${{ steps.platform.outputs.os }}
|
||||
cache-set: ${{ steps.platform.outputs.cache-set }}
|
||||
steps:
|
||||
- uses: teaxyz/brewkit/actions/get-platform@v0
|
||||
id: platform
|
||||
with:
|
||||
platform: ${{ inputs.platform }}
|
||||
|
||||
bottle:
|
||||
needs: [get-platform]
|
||||
runs-on: ${{ fromJson(needs.get-platform.outputs.os) }}
|
||||
outputs:
|
||||
srcs: ${{ env.srcs }}
|
||||
built: ${{ env.built }}
|
||||
pr: ${{ env.PR }}
|
||||
steps:
|
||||
- uses: teaxyz/brewkit/actions/setup-brewkit@v0
|
||||
id: tea
|
||||
|
||||
- uses: actions/download-artifact@v3
|
||||
if: ${{ inputs.new-version }}
|
||||
with:
|
||||
name: ${{ inputs.platform }}
|
||||
|
||||
- uses: teaxyz/brewkit/actions/fetch-pr-artifacts@v0
|
||||
if: ${{ !inputs.new-version }}
|
||||
with:
|
||||
platform: ${{ inputs.platform }}
|
||||
token: ${{ github.token }}
|
||||
AWS_S3_BUCKET: ${{ secrets.AWS_S3_CACHE }}
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
|
||||
- name: clean destination
|
||||
# Note: needed when changing a directory to a symlink, for example in
|
||||
# https://github.com/teaxyz/pantry.extra/pull/435
|
||||
run: |
|
||||
tar tzf $GITHUB_WORKSPACE/artifacts.tgz | \
|
||||
awk '{ print length, $0 }' | \
|
||||
sort -n -s -r | \
|
||||
cut -d" " -f2- | \
|
||||
xargs rm -rf
|
||||
working-directory: ${{ steps.tea.outputs.prefix }}
|
||||
|
||||
- run: tar xzvf $GITHUB_WORKSPACE/artifacts.tgz
|
||||
working-directory: ${{ steps.tea.outputs.prefix }}
|
||||
|
||||
- run: |
|
||||
for file in built srcs; do
|
||||
echo "$file=$(cat $file)" >>$GITHUB_ENV
|
||||
done
|
||||
working-directory: ${{ steps.tea.outputs.prefix }}
|
||||
|
||||
- run: |
|
||||
tea +gnupg.org gpg-agent --daemon || true
|
||||
echo $GPG_PRIVATE_KEY | \
|
||||
base64 -d | \
|
||||
tea +gnupg.org gpg --import --batch --yes
|
||||
env:
|
||||
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
|
||||
|
||||
- uses: teaxyz/brewkit/actions/bottle@v0
|
||||
id: bottle-xz
|
||||
with:
|
||||
built: ${{ env.built }}
|
||||
compression: xz
|
||||
gpg-key-id: ${{ secrets.GPG_KEY_ID }}
|
||||
gpg-key-passphrase: ${{ secrets.GPG_PASSPHRASE }}
|
||||
|
||||
- uses: teaxyz/brewkit/actions/bottle@v0
|
||||
id: bottle-gz
|
||||
with:
|
||||
built: ${{ env.built }}
|
||||
compression: gz
|
||||
gpg-key-id: ${{ secrets.GPG_KEY_ID }}
|
||||
gpg-key-passphrase: ${{ secrets.GPG_PASSPHRASE }}
|
||||
|
||||
- run: |
|
||||
echo ${{ steps.bottle-gz.outputs.bottles }} ${{ steps.bottle-xz.outputs.bottles }} >bottles
|
||||
echo ${{ steps.bottle-gz.outputs.checksums }} ${{ steps.bottle-xz.outputs.checksums }} >checksums
|
||||
echo ${{ steps.bottle-gz.outputs.signatures }} ${{ steps.bottle-xz.outputs.signatures }} >signatures
|
||||
|
||||
SRCS=$(echo $srcs | tr -d '~')
|
||||
|
||||
tar cf $GITHUB_WORKSPACE/artifacts.tar \
|
||||
$SRCS \
|
||||
${{ steps.bottle-gz.outputs.bottles }} \
|
||||
${{ steps.bottle-xz.outputs.bottles }} \
|
||||
bottles checksums signatures
|
||||
working-directory: ${{ steps.tea.outputs.prefix }}
|
||||
|
||||
- name: upload artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ inputs.platform }}-bottles
|
||||
path: artifacts.tar
|
||||
if-no-files-found: error
|
||||
|
||||
upload:
|
||||
needs: [bottle]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: teaxyz/brewkit/actions/setup-brewkit@v0
|
||||
with:
|
||||
prefix: ${{ github.workspace }}
|
||||
|
||||
- uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: ${{ inputs.platform }}-bottles
|
||||
|
||||
- run: |
|
||||
tar xvf artifacts.tar
|
||||
|
||||
for file in bottles checksums signatures; do
|
||||
echo "$file=$(cat $file)" >>$GITHUB_ENV
|
||||
done
|
||||
|
||||
- uses: teaxyz/brewkit/actions/upload@v0
|
||||
id: upload
|
||||
with:
|
||||
pkgs: ${{ needs.bottle.outputs.built }} ${{ needs.bottle.outputs.built }}
|
||||
srcs: ${{ needs.bottle.outputs.srcs }} ${{ needs.bottle.outputs.srcs }}
|
||||
bottles: ${{ env.bottles }}
|
||||
checksums: ${{ env.checksums }}
|
||||
signatures: ${{ env.signatures }}
|
||||
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
|
||||
- uses: chetan/invalidate-cloudfront-action@v2
|
||||
env:
|
||||
PATHS: ${{ steps.upload.outputs.cf-invalidation-paths }}
|
||||
DISTRIBUTION: ${{ secrets.AWS_CF_DISTRIBUTION_ID }}
|
||||
AWS_REGION: us-east-1
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
|
||||
complain:
|
||||
needs: [upload]
|
||||
if: inputs.new-version == 'true' && failure()
|
||||
uses: ./.github/workflows/complain.yml
|
||||
with:
|
||||
projects: ${{ inputs.projects }}
|
||||
platform: ${{ inputs.platform }}
|
||||
secrets: inherit
|
177
.github/workflows/build.yml
vendored
Normal file
177
.github/workflows/build.yml
vendored
Normal file
|
@ -0,0 +1,177 @@
|
|||
name: build
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
projects:
|
||||
required: true
|
||||
type: string
|
||||
platform:
|
||||
required: true
|
||||
type: string
|
||||
new-version:
|
||||
type: boolean
|
||||
required: false
|
||||
default: false
|
||||
|
||||
jobs:
|
||||
get-platform:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
os: ${{ steps.platform.outputs.os }}
|
||||
build-os: ${{ steps.platform.outputs.build-os }}
|
||||
container: ${{ steps.platform.outputs.container }}
|
||||
test-matrix: ${{ steps.platform.outputs.test-matrix }}
|
||||
cache-set: ${{ steps.platform.outputs.cache-set }}
|
||||
steps:
|
||||
- uses: teaxyz/brewkit/actions/get-platform@v0
|
||||
id: platform
|
||||
with:
|
||||
platform: ${{ inputs.platform }}
|
||||
|
||||
build:
|
||||
runs-on: ${{ fromJson(needs.get-platform.outputs.build-os) }}
|
||||
container: ${{ fromJson(needs.get-platform.outputs.container) }}
|
||||
needs: [get-platform]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- uses: teaxyz/brewkit/actions/setup-brewkit@v0
|
||||
id: tea
|
||||
with:
|
||||
prefix: /opt
|
||||
|
||||
- name: sanitize macOS runners
|
||||
if: fromJson(needs.get-platform.outputs.build-os) == 'macos-11'
|
||||
run: sudo mv /usr/local/bin/* /tmp/
|
||||
|
||||
- run: pkg build ${{ inputs.projects }}
|
||||
id: build
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
FORCE_UNSAFE_CONFIGURE: 1 # some configure scripts refuse to run as root
|
||||
|
||||
- run: |
|
||||
ABS_PATHS=$(echo $PATHS | tr ' ' '\n' | sed -e "s_^_$TEA_PREFIX/_" | tr '\n' ' ')
|
||||
echo "paths=$ABS_PATHS" >> $GITHUB_OUTPUT
|
||||
if: startsWith(inputs.platform, 'darwin+')
|
||||
id: absolute-paths
|
||||
env:
|
||||
PATHS: ${{ steps.build.outputs.relative-paths }}
|
||||
TEA_PREFIX: ${{ steps.tea.outputs.prefix }}
|
||||
|
||||
# sign macOS binaries
|
||||
- uses: teaxyz/brewkit/actions/codesign@v0
|
||||
if: startsWith(inputs.platform, 'darwin+') && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name
|
||||
with:
|
||||
p12-file-base64: ${{ secrets.APPLE_CERTIFICATE_P12 }}
|
||||
p12-password: ${{ secrets.APPLE_CERTIFICATE_P12_PASSWORD }}
|
||||
identity: "Developer ID Application: Tea Inc. (7WV56FL599)"
|
||||
paths: ${{ steps.absolute-paths.outputs.paths }}
|
||||
|
||||
# cache data we'll need in the bottling job
|
||||
- name: assemble artifact metadata
|
||||
run: |
|
||||
echo ${{ steps.build.outputs.pkgs }} >built
|
||||
echo ${{ steps.build.outputs.srcs-relative-paths }} >srcs
|
||||
working-directory: ${{ steps.tea.outputs.prefix }}
|
||||
|
||||
# tarring ourselves ∵ GHA-artifacts (ludicrously) lose permissions
|
||||
# /ref https://github.com/actions/upload-artifact/issues/38
|
||||
- name: create artifacts.tgz
|
||||
run:
|
||||
tar czvf $GITHUB_WORKSPACE/artifacts.tgz
|
||||
${{ steps.build.outputs.relative-paths }}
|
||||
${{ steps.build.outputs.srcs-relative-paths }}
|
||||
built srcs
|
||||
working-directory: ${{ steps.tea.outputs.prefix }}
|
||||
|
||||
- name: upload artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ inputs.platform }}
|
||||
path: artifacts.tgz
|
||||
if-no-files-found: error
|
||||
|
||||
test:
|
||||
needs: [get-platform, build]
|
||||
runs-on: ${{ matrix.platform.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
platform: ${{ fromJson(needs.get-platform.outputs.test-matrix) }}
|
||||
outputs:
|
||||
HAS_SECRETS: ${{ env.HAS_SECRETS }}
|
||||
container: ${{ matrix.platform.container }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: teaxyz/brewkit/actions/setup-brewkit@v0
|
||||
|
||||
- uses: teaxyz/setup@v0
|
||||
with:
|
||||
srcroot: null
|
||||
|
||||
- uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: ${{ inputs.platform }}
|
||||
|
||||
- name: clean destination
|
||||
# Note: needed when changing a directory to a symlink, for example in
|
||||
# https://github.com/teaxyz/pantry/pull/435
|
||||
run: |
|
||||
tar tzf $GITHUB_WORKSPACE/artifacts.tgz | \
|
||||
awk '{ print length, $0 }' | \
|
||||
sort -n -s -r | \
|
||||
cut -d" " -f2- | \
|
||||
xargs rm -rf
|
||||
working-directory: ${{ env.TEA_PREFIX }}
|
||||
|
||||
- name: extract bottles
|
||||
run: tar xzvf artifacts.tgz -C $TEA_PREFIX
|
||||
|
||||
- run: pkg test ${{ inputs.projects }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
# FIXME: this shouldn't be necessary, but it currently is for the
|
||||
# ubuntu+container test matrix entries. :/
|
||||
TEA_PANTRY_PATH: ${{ github.workspace }}
|
||||
|
||||
- name: '[post]'
|
||||
run:
|
||||
echo "HAS_SECRETS=$HAS_SECRETS" >>$GITHUB_ENV
|
||||
env:
|
||||
HAS_SECRETS: ${{ secrets.AWS_S3_CACHE != null }}
|
||||
|
||||
bottle:
|
||||
needs: [test]
|
||||
if: inputs.new-version == true
|
||||
uses: ./.github/workflows/bottle.yml
|
||||
with:
|
||||
new-version: ${{ inputs.new-version }}
|
||||
platform: ${{ inputs.platform }}
|
||||
secrets: inherit
|
||||
|
||||
complain:
|
||||
needs: [test]
|
||||
if: inputs.new-version == true && failure()
|
||||
uses: ./.github/workflows/complain.yml
|
||||
with:
|
||||
projects: ${{ inputs.projects }}
|
||||
platform: ${{ inputs.platform }}
|
||||
secrets: inherit
|
||||
|
||||
stage:
|
||||
needs: [test]
|
||||
# this only works for PRs from our team to our repo (security! :( )
|
||||
if: startsWith(github.ref, 'refs/pull/') && github.repository_owner == 'teaxyz' && needs.test.outputs.HAS_SECRETS == 'true'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: ${{ inputs.platform }}
|
||||
|
||||
- uses: teaxyz/brewkit/actions/stage-build-artifacts@v0
|
||||
with:
|
||||
platform: ${{ inputs.platform }}
|
||||
AWS_S3_BUCKET: ${{ secrets.AWS_S3_CACHE }}
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
20
.github/workflows/cd.yml
vendored
20
.github/workflows/cd.yml
vendored
|
@ -1,8 +1,8 @@
|
|||
name: cd
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
cd:
|
||||
|
@ -11,11 +11,10 @@ jobs:
|
|||
has-artifacts: ${{ steps.has-artifacts.outputs.has-artifacts }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
repository: teaxyz/pantry.core
|
||||
|
||||
- uses: teaxyz/brewkit/actions/setup-brewkit@v0
|
||||
|
||||
# TODO: convert to teaxyz/brewkit/actions/map-projects-to-githubs
|
||||
- run: .github/scripts/map-projects-to-githubs.ts
|
||||
env:
|
||||
WATCHER_URL: ${{ secrets.WATCHER_URL }}
|
||||
|
@ -42,7 +41,7 @@ jobs:
|
|||
- linux+aarch64
|
||||
needs: [cd]
|
||||
if: ${{ needs.cd.outputs.has-artifacts == 'true' }}
|
||||
uses: teaxyz/pantry.core/.github/workflows/bottle.yml@main
|
||||
uses: ./.github/workflows/bottle.yml
|
||||
with:
|
||||
platform: ${{ matrix.platform }}
|
||||
secrets: inherit
|
||||
|
@ -76,6 +75,9 @@ jobs:
|
|||
bottle-standalone:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [cd]
|
||||
permissions:
|
||||
contents: read
|
||||
actions: write
|
||||
if: ${{ needs.cd.outputs.has-artifacts == 'false' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
@ -85,10 +87,12 @@ jobs:
|
|||
PATTERNS: projects/**/package.yml
|
||||
- id: diff
|
||||
run: |
|
||||
RESULT=$(echo ${{ steps.get-diff.outputs.diff }} | sed 's#projects/\(.*\)/.*#\1#')
|
||||
for x in ${{ steps.get-diff.outputs.diff }}; do
|
||||
y=$(echo $x | sed 's#projects/\(.*\)/package.yml#\1#')
|
||||
RESULT="$RESULT $y"
|
||||
done
|
||||
echo "diff=$RESULT" >> $GITHUB_OUTPUT
|
||||
- run: gh workflow run new-version.yml -R teaxyz/pantry.core -f "projects=$PROJECTS"
|
||||
- run: gh workflow run new-version.yml -f "projects=$PROJECTS"
|
||||
if: ${{ steps.diff.outputs.diff != '' }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.TEMP_JACOBS_GITHUB_PAT }}
|
||||
PROJECTS: ${{ steps.diff.outputs.diff }}
|
||||
|
|
20
.github/workflows/ci-scripts.yml
vendored
Normal file
20
.github/workflows/ci-scripts.yml
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
name: ci·scripts
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- .github/**.ts
|
||||
|
||||
jobs:
|
||||
typecheck:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: teaxyz/setup@v0
|
||||
with:
|
||||
srcroot: .github
|
||||
- uses: teaxyz/brewkit/actions/cache@v0
|
||||
with:
|
||||
cache-name: ci-scripts
|
||||
- run: deno check --unstable **/*.ts
|
||||
working-directory: .github
|
3
.github/workflows/ci.yml
vendored
3
.github/workflows/ci.yml
vendored
|
@ -1,4 +1,5 @@
|
|||
name: ci
|
||||
|
||||
on: pull_request
|
||||
|
||||
jobs:
|
||||
|
@ -29,7 +30,7 @@ jobs:
|
|||
- darwin+aarch64
|
||||
- linux+aarch64
|
||||
needs: [get-diff]
|
||||
uses: teaxyz/pantry.core/.github/workflows/build.yml@main
|
||||
uses: ./.github/workflows/build.yml
|
||||
with:
|
||||
projects: ${{ needs.get-diff.outputs.diff || 'zlib.net^1.2' }}
|
||||
platform: ${{ matrix.platform }}
|
||||
|
|
2
.github/workflows/cleanup.yml
vendored
2
.github/workflows/cleanup.yml
vendored
|
@ -24,6 +24,6 @@ jobs:
|
|||
PR=$(echo ${{github.ref}} | sed -e 's_refs/pull/\(.*\)/merge_\1_')
|
||||
|
||||
aws s3 rm --recursive s3://$AWS_S3_CACHE/pull-request/$REPO/$PR
|
||||
if: startsWith(github.ref, 'refs/pull/') && startsWith(github.repository, 'teaxyz/pantry.')
|
||||
if: startsWith(github.ref, 'refs/pull/') && github.repository_owner == 'teaxyz'
|
||||
env:
|
||||
AWS_S3_CACHE: ${{ secrets.AWS_S3_CACHE }}
|
41
.github/workflows/complain.yml
vendored
Normal file
41
.github/workflows/complain.yml
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
name: complain
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
projects:
|
||||
required: true
|
||||
type: string
|
||||
platform:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
permissions:
|
||||
issues: write
|
||||
|
||||
jobs:
|
||||
complain:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: martialonline/workflow-status@v3
|
||||
id: status
|
||||
|
||||
- uses: rtCamp/action-slack-notify@v2
|
||||
if: ${{ env.SLACK_WEBHOOK != '' }}
|
||||
env:
|
||||
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
|
||||
SLACK_CHANNEL: ${{ secrets.SLACK_CHANNEL }}
|
||||
SLACK_MESSAGE: new-version:${{ inputs.projects }} (${{ inputs.platform }}) ${{ steps.status.outputs.status }}
|
||||
SLACK_COLOR: ${{ steps.status.outputs.status }}
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
if: github.ref_name == 'main'
|
||||
|
||||
- uses: JasonEtco/create-an-issue@v2
|
||||
if: github.ref_name == 'main'
|
||||
with:
|
||||
filename: ./.github/NEW_VERSION_ISSUE_TEMPLATE.md
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
PACKAGE: ${{ inputs.projects }} (${{ inputs.platform }})
|
||||
URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
26
.github/workflows/index-data.yml
vendored
Normal file
26
.github/workflows/index-data.yml
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
name: index-data
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
projects:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
queue-detail-ingestion:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: teaxyz/setup@v0
|
||||
with:
|
||||
srcroot: null
|
||||
- uses: teaxyz/brewkit/actions/cache@v0
|
||||
# TODO: convert to teaxyz/brewkit/actions/index-packages
|
||||
- run: ./.github/scripts/index-packages.ts ${{ inputs.projects }}
|
||||
env:
|
||||
TEA_PANTRY_PATH: ${{ github.workspace }}
|
||||
AWS_REGION: us-east-1
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
SQS_GENERATE_PACKAGE_DETAILS_URL: ${{ secrets.SQS_GENERATE_PACKAGE_DETAILS_URL }}
|
34
.github/workflows/new-version.yml
vendored
Normal file
34
.github/workflows/new-version.yml
vendored
Normal file
|
@ -0,0 +1,34 @@
|
|||
name: new-version
|
||||
run-name: new-version (${{ inputs.projects }})
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
projects:
|
||||
description: eg. `foo.com=1.2.3 bar.com^2.3.4`
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
platform:
|
||||
- darwin+x86-64
|
||||
- linux+x86-64
|
||||
- darwin+aarch64
|
||||
- linux+aarch64
|
||||
uses: ./.github/workflows/build.yml
|
||||
with:
|
||||
new-version: true
|
||||
projects: ${{ inputs.projects }}
|
||||
platform: ${{ matrix.platform }}
|
||||
secrets: inherit
|
||||
|
||||
index_data:
|
||||
needs: [build]
|
||||
if: success()
|
||||
uses: ./.github/workflows/index-data.yml
|
||||
with:
|
||||
projects: ${{ inputs.projects }}
|
||||
secrets: inherit
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -2,3 +2,6 @@
|
|||
/builds
|
||||
/testbeds
|
||||
.DS_Store
|
||||
|
||||
#TODO commit after v1
|
||||
/deno.lock
|
||||
|
|
7
.vscode/settings.json
vendored
Normal file
7
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"deno.enable": true,
|
||||
"deno.lint": true,
|
||||
"deno.unstable": true,
|
||||
"deno.config": ".github/deno.jsonc",
|
||||
"deno.importMap": "../cli/import-map.json"
|
||||
}
|
13
README.md
13
README.md
|
@ -1,7 +1,5 @@
|
|||
![tea](https://tea.xyz/banner.png)
|
||||
|
||||
This pantry is the complement to [pantry.core].
|
||||
|
||||
|
||||
# What is a Pantry?
|
||||
|
||||
|
@ -29,9 +27,9 @@ other sources as much as possible, eg. versions are taken from the
|
|||
Assuming you have tea (/w magic) installed:
|
||||
|
||||
```sh
|
||||
$ git clone https://github.com/teaxyz/pantry.extra
|
||||
$ git clone https://github.com/teaxyz/pantry
|
||||
|
||||
$ cd pantry.extra
|
||||
$ cd pantry
|
||||
# all the following commands operate in `./tea.out`
|
||||
# your tea installation remains untouched
|
||||
|
||||
|
@ -88,16 +86,13 @@ with their pull request then you can use GitHub’s CLI:
|
|||
$ gh pr checkout 123
|
||||
|
||||
# or you can copy paste the URL:
|
||||
$ gh pr checkout https://github.com/teaxyz/pantry.extra/pull/123
|
||||
$ gh pr checkout https://github.com/teaxyz/pantry/pull/123
|
||||
|
||||
# then open for editing:
|
||||
$ pkg edit
|
||||
```
|
||||
|
||||
|
||||
[pantry.core]: https://github.com/teaxyz/pantry.core
|
||||
[wiki]: https://github.com/teaxyz/pantry.extra/wiki
|
||||
[tea/cli]: https://github.com/teaxyz/cli
|
||||
[wiki]: https://github.com/teaxyz/pantry/wiki
|
||||
[discussion]: https://github.com/orgs/teaxyz/discussions
|
||||
[PAT]: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token
|
||||
[IPFS]: https://ipfs.tech
|
||||
|
|
|
@ -29,7 +29,7 @@ build:
|
|||
- -buildmode=pie
|
||||
|
||||
test: |
|
||||
echo "teaxyz/pantry.extra" > repos.txt
|
||||
echo "teaxyz/pantry" > repos.txt
|
||||
mp init -f repos.txt
|
||||
# mp clone
|
||||
# ^^ FIXME fails with exit code 128
|
||||
|
|
|
@ -61,7 +61,7 @@ build:
|
|||
- --prefix={{ prefix }}
|
||||
- --libdir={{ prefix }}/lib
|
||||
- --enable-languages=c,c++,objc,obj-c++
|
||||
- --with-bugurl="https://github.com/teaxyz/pantry.extra/issues"
|
||||
- --with-bugurl="https://github.com/teaxyz/pantry/issues"
|
||||
- --disable-bootstrap
|
||||
- --disable-nls
|
||||
linux:
|
||||
|
|
Loading…
Reference in a new issue