feat: auto-create CR repositories before build
Some checks failed
Build and Deploy LTY / build-and-deploy (push) Has been cancelled
Some checks failed
Build and Deploy LTY / build-and-deploy (push) Has been cancelled
Add Volcano Engine OpenAPI call to ensure lty-backend and lty-admin repos exist in the CR namespace before pushing images. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
32f55b3f39
commit
8762da358a
@ -48,6 +48,53 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "${{ env.CR_PASSWORD_ACTIVE }}" | docker login --username "${{ env.CR_USERNAME_ACTIVE }}" --password-stdin ${{ env.CR_SERVER_ACTIVE }}
|
echo "${{ env.CR_PASSWORD_ACTIVE }}" | docker login --username "${{ env.CR_USERNAME_ACTIVE }}" --password-stdin ${{ env.CR_SERVER_ACTIVE }}
|
||||||
|
|
||||||
|
- name: Ensure CR Repositories Exist
|
||||||
|
run: |
|
||||||
|
REGISTRY_NAME=$(echo "${{ env.CR_SERVER_ACTIVE }}" | sed 's/.cr.volces.com//')
|
||||||
|
python3 << PYEOF
|
||||||
|
import hashlib, hmac, json, os, sys
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
from urllib.request import Request, urlopen
|
||||||
|
from urllib.parse import urlencode
|
||||||
|
|
||||||
|
def create_repo(ak, sk, registry, ns, name, region='cn-shanghai'):
|
||||||
|
service, host = 'cr', 'open.volcengineapi.com'
|
||||||
|
t = datetime.now(timezone.utc)
|
||||||
|
ds, amz = t.strftime('%Y%m%d'), t.strftime('%Y%m%dT%H%M%SZ')
|
||||||
|
body = json.dumps({'Registry': registry, 'Namespace': ns, 'Name': name})
|
||||||
|
qs = urlencode(sorted({'Action': 'CreateRepository', 'Version': '2022-05-12'}.items()))
|
||||||
|
ph = hashlib.sha256(body.encode()).hexdigest()
|
||||||
|
sh = 'content-type;host;x-content-sha256;x-date'
|
||||||
|
cr = 'POST\n/\n%s\ncontent-type:application/json\nhost:%s\nx-content-sha256:%s\nx-date:%s\n\n%s\n%s' % (qs, host, ph, amz, sh, ph)
|
||||||
|
cs = '%s/%s/%s/request' % (ds, region, service)
|
||||||
|
sts = 'HMAC-SHA256\n%s\n%s\n%s' % (amz, cs, hashlib.sha256(cr.encode()).hexdigest())
|
||||||
|
k = sk.encode()
|
||||||
|
for p in [ds, region, service, 'request']:
|
||||||
|
k = hmac.new(k, p.encode(), hashlib.sha256).digest()
|
||||||
|
sig = hmac.new(k, sts.encode(), hashlib.sha256).hexdigest()
|
||||||
|
auth = 'HMAC-SHA256 Credential=%s/%s, SignedHeaders=%s, Signature=%s' % (ak, cs, sh, sig)
|
||||||
|
req = Request('https://%s?%s' % (host, qs), data=body.encode(), headers={
|
||||||
|
'Content-Type': 'application/json', 'Host': host,
|
||||||
|
'X-Date': amz, 'X-Content-Sha256': ph, 'Authorization': auth
|
||||||
|
}, method='POST')
|
||||||
|
try:
|
||||||
|
urlopen(req)
|
||||||
|
print('Created %s/%s' % (ns, name))
|
||||||
|
except Exception as e:
|
||||||
|
err = e.read().decode() if hasattr(e, 'read') else str(e)
|
||||||
|
if 'Exist' in err:
|
||||||
|
print('%s/%s already exists, skip' % (ns, name))
|
||||||
|
else:
|
||||||
|
print('Warning: %s/%s: %s' % (ns, name, err))
|
||||||
|
|
||||||
|
ak = '${{ secrets.VOLC_ACCESS_KEY }}'
|
||||||
|
sk = '${{ secrets.VOLC_SECRET_KEY }}'
|
||||||
|
registry = '${REGISTRY_NAME}'
|
||||||
|
ns = '${{ env.CR_ORG }}'
|
||||||
|
for repo in ['lty-backend', 'lty-admin']:
|
||||||
|
create_repo(ak, sk, registry, ns, repo)
|
||||||
|
PYEOF
|
||||||
|
|
||||||
- name: Build and Push Backend
|
- name: Build and Push Backend
|
||||||
id: build_backend
|
id: build_backend
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user