// Copyright 2025 New Vector Ltd. // // SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial // Please see LICENSE files in the repository root for full details. // @ts-check /** @param {import('@actions/github-script').AsyncFunctionArguments} AsyncFunctionArguments */ module.exports = async ({ github, context }) => { const fs = require("node:fs/promises"); const { owner, repo } = context.repo; const version = process.env.VERSION; const parent = context.sha; if (!version) throw new Error("VERSION is not defined"); const files = ["Cargo.toml", "Cargo.lock"]; /** @type {{path: string, mode: "100644", type: "blob", sha: string}[]} */ const tree = []; for (const file of files) { const content = await fs.readFile(file); const blob = await github.rest.git.createBlob({ owner, repo, content: content.toString("base64"), encoding: "base64", }); console.log(`Created blob for ${file}:`, blob.data.url); tree.push({ path: file, mode: "100644", type: "blob", sha: blob.data.sha, }); } const treeObject = await github.rest.git.createTree({ owner, repo, tree, base_tree: parent, }); console.log("Created tree:", treeObject.data.url); const commit = await github.rest.git.createCommit({ owner, repo, message: version, parents: [parent], tree: treeObject.data.sha, }); console.log("Created commit:", commit.data.url); const tag = await github.rest.git.createTag({ owner, repo, tag: `v${version}`, message: version, type: "commit", object: commit.data.sha, }); console.log("Created tag:", tag.data.url); return { commit: commit.data.sha, tag: tag.data.sha }; };