diff options
| author | Frank <[email protected]> | 2025-07-25 17:34:47 -0400 |
|---|---|---|
| committer | Frank <[email protected]> | 2025-07-25 17:34:47 -0400 |
| commit | 3a7a2a838ec6ba625aa27aaa73cf4ea8ee03e79e (patch) | |
| tree | 0c9b4fbaf21001511959b6ba803b8b1b162868b7 /sdks | |
| parent | 10ae43a12190ed3ac96ae1d672b1aa1dd006b072 (diff) | |
| download | opencode-3a7a2a838ec6ba625aa27aaa73cf4ea8ee03e79e.tar.gz opencode-3a7a2a838ec6ba625aa27aaa73cf4ea8ee03e79e.zip | |
wip: github actions
Diffstat (limited to 'sdks')
| -rw-r--r-- | sdks/github/action.yml | 58 | ||||
| -rw-r--r-- | sdks/github/bun.lock | 157 | ||||
| -rw-r--r-- | sdks/github/package.json | 19 | ||||
| -rwxr-xr-x | sdks/github/script/publish | 15 | ||||
| -rwxr-xr-x | sdks/github/script/release | 41 | ||||
| -rw-r--r-- | sdks/github/src/index.ts | 541 | ||||
| -rw-r--r-- | sdks/github/src/types.ts | 103 | ||||
| -rw-r--r-- | sdks/github/sst-env.d.ts | 9 | ||||
| -rw-r--r-- | sdks/github/tsconfig.json | 29 |
9 files changed, 0 insertions, 972 deletions
diff --git a/sdks/github/action.yml b/sdks/github/action.yml deleted file mode 100644 index 8501ce098..000000000 --- a/sdks/github/action.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: "opencode GitHub Action" -description: "Run opencode in GitHub Actions workflows" -branding: - icon: "code" - color: "orange" - -inputs: - model: - description: "Model to use" - required: false - - share: - description: "Share the opencode session (defaults to true for public repos)" - required: false - -outputs: - share_url: - description: "URL to share the opencode execution" - value: ${{ steps.run_opencode.outputs.share_url }} - -runs: - using: "composite" - steps: - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 22 - - - name: Install Bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: 1.2.16 - - - name: Install Dependencies - shell: bash - run: | - cd ${GITHUB_ACTION_PATH} - bun install - - - name: Install opencode - shell: bash - run: curl -fsSL https://opencode.ai/install | bash - - - name: Run opencode - shell: bash - id: run_opencode - run: | - bun run ${GITHUB_ACTION_PATH}/src/index.ts - env: - INPUT_MODEL: ${{ inputs.model }} - INPUT_SHARE: ${{ inputs.share }} - - #- name: Testing - # shell: bash - # run: | - # gh pr comment ${{ github.event.number }} --body "This is an automated comment" - # env: - # GH_TOKEN: ${{ github.token }} diff --git a/sdks/github/bun.lock b/sdks/github/bun.lock deleted file mode 100644 index 255877516..000000000 --- a/sdks/github/bun.lock +++ /dev/null @@ -1,157 +0,0 @@ -{ - "lockfileVersion": 1, - "workspaces": { - "": { - "name": "github", - "dependencies": { - "@actions/core": "^1.11.1", - "@actions/github": "^6.0.1", - "@octokit/graphql": "^9.0.1", - "@octokit/rest": "^22.0.0", - }, - "devDependencies": { - "@octokit/webhooks-types": "^7.6.1", - "@types/bun": "latest", - "@types/node": "^24.0.10", - }, - "peerDependencies": { - "typescript": "^5", - }, - }, - }, - "packages": { - "@actions/core": ["@actions/[email protected]", "", { "dependencies": { "@actions/exec": "^1.1.1", "@actions/http-client": "^2.0.1" } }, "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A=="], - - "@actions/exec": ["@actions/[email protected]", "", { "dependencies": { "@actions/io": "^1.0.1" } }, "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w=="], - - "@actions/github": ["@actions/[email protected]", "", { "dependencies": { "@actions/http-client": "^2.2.0", "@octokit/core": "^5.0.1", "@octokit/plugin-paginate-rest": "^9.2.2", "@octokit/plugin-rest-endpoint-methods": "^10.4.0", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "undici": "^5.28.5" } }, "sha512-xbZVcaqD4XnQAe35qSQqskb3SqIAfRyLBrHMd/8TuL7hJSz2QtbDwnNM8zWx4zO5l2fnGtseNE3MbEvD7BxVMw=="], - - "@actions/http-client": ["@actions/[email protected]", "", { "dependencies": { "tunnel": "^0.0.6", "undici": "^5.25.4" } }, "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA=="], - - "@actions/io": ["@actions/[email protected]", "", {}, "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q=="], - - "@fastify/busboy": ["@fastify/[email protected]", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="], - - "@octokit/auth-token": ["@octokit/[email protected]", "", {}, "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA=="], - - "@octokit/core": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@octokit/types": "^13.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" } }, "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg=="], - - "@octokit/endpoint": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" } }, "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw=="], - - "@octokit/graphql": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/request": "^10.0.2", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg=="], - - "@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="], - - "@octokit/plugin-paginate-rest": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^12.6.0" }, "peerDependencies": { "@octokit/core": "5" } }, "sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ=="], - - "@octokit/plugin-request-log": ["@octokit/[email protected]", "", { "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q=="], - - "@octokit/plugin-rest-endpoint-methods": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^12.6.0" }, "peerDependencies": { "@octokit/core": "5" } }, "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg=="], - - "@octokit/request": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/endpoint": "^9.0.6", "@octokit/request-error": "^5.1.1", "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" } }, "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw=="], - - "@octokit/request-error": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" } }, "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g=="], - - "@octokit/rest": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/core": "^7.0.2", "@octokit/plugin-paginate-rest": "^13.0.1", "@octokit/plugin-request-log": "^6.0.0", "@octokit/plugin-rest-endpoint-methods": "^16.0.0" } }, "sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA=="], - - "@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^25.1.0" } }, "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g=="], - - "@octokit/webhooks-types": ["@octokit/[email protected]", "", {}, "sha512-S8u2cJzklBC0FgTwWVLaM8tMrDuDMVE4xiTK4EYXM9GntyvrdbSoxqDQa+Fh57CCNApyIpyeqPhhFEmHPfrXgw=="], - - "@types/bun": ["@types/[email protected]", "", { "dependencies": { "bun-types": "1.2.18" } }, "sha512-Xf6RaWVheyemaThV0kUfaAUvCNokFr+bH8Jxp+tTZfx7dAPA8z9ePnP9S9+Vspzuxxx9JRAXhnyccRj3GyCMdQ=="], - - "@types/node": ["@types/[email protected]", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-Qm9OYVOFHFYg3wJoTSrz80hoec5Lia/dPp84do3X7dZvLikQvM1YpmvTBEdIr/e+U8HTkFjLHLnl78K/qjf+jQ=="], - - "@types/react": ["@types/[email protected]", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g=="], - - "before-after-hook": ["[email protected]", "", {}, "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="], - - "bun-types": ["[email protected]", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-04+Eha5NP7Z0A9YgDAzMk5PHR16ZuLVa83b26kH5+cp1qZW4F6FmAURngE7INf4tKOvCE69vYvDEwoNl1tGiWw=="], - - "csstype": ["[email protected]", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], - - "deprecation": ["[email protected]", "", {}, "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="], - - "fast-content-type-parse": ["[email protected]", "", {}, "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg=="], - - "once": ["[email protected]", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], - - "tunnel": ["[email protected]", "", {}, "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="], - - "typescript": ["[email protected]", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], - - "undici": ["[email protected]", "", { "dependencies": { "@fastify/busboy": "^2.0.0" } }, "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg=="], - - "undici-types": ["[email protected]", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="], - - "universal-user-agent": ["[email protected]", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], - - "wrappy": ["[email protected]", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], - - "@octokit/core/@octokit/graphql": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/request": "^8.4.1", "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" } }, "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g=="], - - "@octokit/core/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="], - - "@octokit/core/universal-user-agent": ["[email protected]", "", {}, "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ=="], - - "@octokit/endpoint/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="], - - "@octokit/endpoint/universal-user-agent": ["[email protected]", "", {}, "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ=="], - - "@octokit/graphql/@octokit/request": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/endpoint": "^11.0.0", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA=="], - - "@octokit/plugin-paginate-rest/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^20.0.0" } }, "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw=="], - - "@octokit/plugin-request-log/@octokit/core": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.1", "@octokit/request": "^10.0.2", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ=="], - - "@octokit/plugin-rest-endpoint-methods/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^20.0.0" } }, "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw=="], - - "@octokit/request/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="], - - "@octokit/request/universal-user-agent": ["[email protected]", "", {}, "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ=="], - - "@octokit/request-error/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="], - - "@octokit/rest/@octokit/core": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.1", "@octokit/request": "^10.0.2", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ=="], - - "@octokit/rest/@octokit/plugin-paginate-rest": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^14.1.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw=="], - - "@octokit/rest/@octokit/plugin-rest-endpoint-methods": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^14.1.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-kJVUQk6/dx/gRNLWUnAWKFs1kVPn5O5CYZyssyEoNYaFedqZxsfYs7DwI3d67hGz4qOwaJ1dpm07hOAD1BXx6g=="], - - "@octokit/core/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="], - - "@octokit/endpoint/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="], - - "@octokit/graphql/@octokit/request/@octokit/endpoint": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ=="], - - "@octokit/graphql/@octokit/request/@octokit/request-error": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg=="], - - "@octokit/plugin-paginate-rest/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA=="], - - "@octokit/plugin-request-log/@octokit/core/@octokit/auth-token": ["@octokit/[email protected]", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], - - "@octokit/plugin-request-log/@octokit/core/@octokit/request": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/endpoint": "^11.0.0", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA=="], - - "@octokit/plugin-request-log/@octokit/core/@octokit/request-error": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg=="], - - "@octokit/plugin-request-log/@octokit/core/before-after-hook": ["[email protected]", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], - - "@octokit/plugin-rest-endpoint-methods/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA=="], - - "@octokit/request-error/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="], - - "@octokit/request/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="], - - "@octokit/rest/@octokit/core/@octokit/auth-token": ["@octokit/[email protected]", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], - - "@octokit/rest/@octokit/core/@octokit/request": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/endpoint": "^11.0.0", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA=="], - - "@octokit/rest/@octokit/core/@octokit/request-error": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg=="], - - "@octokit/rest/@octokit/core/before-after-hook": ["[email protected]", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], - - "@octokit/plugin-request-log/@octokit/core/@octokit/request/@octokit/endpoint": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ=="], - - "@octokit/rest/@octokit/core/@octokit/request/@octokit/endpoint": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ=="], - } -} diff --git a/sdks/github/package.json b/sdks/github/package.json deleted file mode 100644 index e1b9222eb..000000000 --- a/sdks/github/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "github", - "type": "module", - "private": true, - "devDependencies": { - "@octokit/webhooks-types": "^7.6.1", - "@types/bun": "latest", - "@types/node": "^24.0.10" - }, - "peerDependencies": { - "typescript": "^5" - }, - "dependencies": { - "@actions/core": "^1.11.1", - "@actions/github": "^6.0.1", - "@octokit/graphql": "^9.0.1", - "@octokit/rest": "^22.0.0" - } -} diff --git a/sdks/github/script/publish b/sdks/github/script/publish deleted file mode 100755 index 3adaae230..000000000 --- a/sdks/github/script/publish +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -# Get the latest Git tag -latest_tag=$(git tag --sort=committerdate | grep -E '^github-v[0-9]+\.[0-9]+\.[0-9]+$' | tail -1) -if [ -z "$latest_tag" ]; then - echo "No tags found" - exit 1 -fi -echo "Latest tag: $latest_tag" - -# Update github-v1 to latest -git tag -d github-v1 -git push origin :refs/tags/github-v1 -git tag -a github-v1 $latest_tag -m "Update github-v1 to $latest_tag" -git push origin github-v1
\ No newline at end of file diff --git a/sdks/github/script/release b/sdks/github/script/release deleted file mode 100755 index 35180b454..000000000 --- a/sdks/github/script/release +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env bash - -# Parse command line arguments -minor=false -while [ "$#" -gt 0 ]; do - case "$1" in - --minor) minor=true; shift 1;; - *) echo "Unknown parameter: $1"; exit 1;; - esac -done - -# Get the latest Git tag -git fetch --force --tags -latest_tag=$(git tag --sort=committerdate | grep -E '^github-v[0-9]+\.[0-9]+\.[0-9]+$' | tail -1) -if [ -z "$latest_tag" ]; then - echo "No tags found" - exit 1 -fi - -echo "Latest tag: $latest_tag" - -# Split the tag into major, minor, and patch numbers -IFS='.' read -ra VERSION <<< "$latest_tag" - -if [ "$minor" = true ]; then - # Increment the minor version and reset patch to 0 - minor_number=${VERSION[1]} - let "minor_number++" - new_version="${VERSION[0]}.$minor_number.0" -else - # Increment the patch version - patch_number=${VERSION[2]} - let "patch_number++" - new_version="${VERSION[0]}.${VERSION[1]}.$patch_number" -fi - -echo "New version: $new_version" - -# Tag -git tag $new_version -git push --tags
\ No newline at end of file diff --git a/sdks/github/src/index.ts b/sdks/github/src/index.ts deleted file mode 100644 index 51ee4f704..000000000 --- a/sdks/github/src/index.ts +++ /dev/null @@ -1,541 +0,0 @@ -#!/usr/bin/env bun - -import os from "os" -import path from "path" -import { $ } from "bun" -import { Octokit } from "@octokit/rest" -import { graphql } from "@octokit/graphql" -import * as core from "@actions/core" -import * as github from "@actions/github" -import type { IssueCommentEvent } from "@octokit/webhooks-types" -import type { GitHubIssue, GitHubPullRequest, IssueQueryResponse, PullRequestQueryResponse } from "./types" - -if (github.context.eventName !== "issue_comment") { - core.setFailed(`Unsupported event type: ${github.context.eventName}`) - process.exit(1) -} - -const { owner, repo } = github.context.repo -const payload = github.context.payload as IssueCommentEvent -const actor = github.context.actor -const issueId = payload.issue.number -const body = payload.comment.body - -let appToken: string -let octoRest: Octokit -let octoGraph: typeof graphql -let commentId: number -let gitCredentials: string -let shareUrl: string | undefined -let state: - | { - type: "issue" - issue: GitHubIssue - } - | { - type: "local-pr" - pr: GitHubPullRequest - } - | { - type: "fork-pr" - pr: GitHubPullRequest - } - -async function run() { - try { - const match = body.match(/^hey\s*opencode,/) - if (!match?.[1]) throw new Error("Command must start with `hey opencode,`") - const userPrompt = match[1] - - const oidcToken = await generateGitHubToken() - appToken = await exchangeForAppToken(oidcToken) - octoRest = new Octokit({ auth: appToken }) - octoGraph = graphql.defaults({ - headers: { authorization: `token ${appToken}` }, - }) - - await configureGit(appToken) - await assertPermissions() - - const comment = await createComment("opencode started...") - commentId = comment.data.id - - // Set state - const repoData = await fetchRepo() - if (payload.issue.pull_request) { - const prData = await fetchPR() - state = { - type: prData.headRepository.nameWithOwner === prData.baseRepository.nameWithOwner ? "local-pr" : "fork-pr", - pr: prData, - } - } else { - state = { - type: "issue", - issue: await fetchIssue(), - } - } - - // Setup git branch - if (state.type === "local-pr") await checkoutLocalBranch(state.pr) - else if (state.type === "fork-pr") await checkoutForkBranch(state.pr) - - // Prompt - const share = process.env.INPUT_SHARE === "true" || !repoData.data.private - const promptData = state.type === "issue" ? buildPromptDataForIssue(state.issue) : buildPromptDataForPR(state.pr) - const responseRet = await runOpencode(`${userPrompt}\n\n${promptData}`, { - share, - }) - - const response = responseRet.stdout - shareUrl = responseRet.stderr.match(/https:\/\/opencode\.ai\/s\/\w+/)?.[0] - - // Comment and push changes - if (await branchIsDirty()) { - const summary = - (await runOpencode(`Summarize the following in less than 40 characters:\n\n${response}`, { share: false })) - ?.stdout || `Fix issue: ${payload.issue.title}` - - if (state.type === "issue") { - const branch = await pushToNewBranch(summary) - const pr = await createPR(repoData.data.default_branch, branch, summary, `${response}\n\nCloses #${issueId}`) - await updateComment(`opencode created pull request #${pr}`) - } else if (state.type === "local-pr") { - await pushToCurrentBranch(summary) - await updateComment(response) - } else if (state.type === "fork-pr") { - await pushToForkBranch(summary, state.pr) - await updateComment(response) - } - } else { - await updateComment(response) - } - await restoreGitConfig() - await revokeAppToken() - } catch (e: any) { - await restoreGitConfig() - await revokeAppToken() - console.error(e) - let msg = e - if (e instanceof $.ShellError) { - msg = e.stderr.toString() - } else if (e instanceof Error) { - msg = e.message - } - if (commentId) await updateComment(msg) - core.setFailed(`opencode failed with error: ${msg}`) - // Also output the clean error message for the action to capture - //core.setOutput("prepare_error", e.message); - process.exit(1) - } -} - -if (import.meta.main) { - run() -} - -async function generateGitHubToken() { - try { - return await core.getIDToken("opencode-github-action") - } catch (error) { - console.error("Failed to get OIDC token:", error) - throw new Error("Could not fetch an OIDC token. Make sure to add `id-token: write` to your workflow permissions.") - } -} - -async function exchangeForAppToken(oidcToken: string) { - const response = await fetch("https://api.opencode.ai/exchange_github_app_token", { - method: "POST", - headers: { - Authorization: `Bearer ${oidcToken}`, - }, - }) - - if (!response.ok) { - const responseJson = (await response.json()) as { error?: string } - throw new Error(`App token exchange failed: ${response.status} ${response.statusText} - ${responseJson.error}`) - } - - const responseJson = (await response.json()) as { token: string } - return responseJson.token -} - -async function configureGit(appToken: string) { - console.log("Configuring git...") - const config = "http.https://github.com/.extraheader" - const ret = await $`git config --local --get ${config}` - gitCredentials = ret.stdout.toString().trim() - - const newCredentials = Buffer.from(`x-access-token:${appToken}`, "utf8").toString("base64") - - await $`git config --local --unset-all ${config}` - await $`git config --local ${config} "AUTHORIZATION: basic ${newCredentials}"` - await $`git config --global user.name "opencode-agent[bot]"` - await $`git config --global user.email "opencode-agent[bot]@users.noreply.github.com"` -} - -async function checkoutLocalBranch(pr: GitHubPullRequest) { - console.log("Checking out local branch...") - - const branch = pr.headRefName - const depth = Math.max(pr.commits.totalCount, 20) - - await $`git fetch origin --depth=${depth} ${branch}` - await $`git checkout ${branch}` -} - -async function checkoutForkBranch(pr: GitHubPullRequest) { - console.log("Checking out fork branch...") - - const remoteBranch = pr.headRefName - const localBranch = generateBranchName() - const depth = Math.max(pr.commits.totalCount, 20) - - await $`git remote add fork https://github.com/${pr.headRepository.nameWithOwner}.git` - await $`git fetch fork --depth=${depth} ${remoteBranch}` - await $`git checkout -b ${localBranch} fork/${remoteBranch}` -} - -async function restoreGitConfig() { - if (!gitCredentials) return - const config = "http.https://github.com/.extraheader" - await $`git config --local ${config} "${gitCredentials}"` -} - -async function assertPermissions() { - console.log(`Asserting permissions for user ${actor}...`) - - let permission - try { - const response = await octoRest.repos.getCollaboratorPermissionLevel({ - owner, - repo, - username: actor, - }) - - permission = response.data.permission - console.log(` permission: ${permission}`) - } catch (error) { - console.error(`Failed to check permissions: ${error}`) - throw new Error(`Failed to check permissions for user ${actor}: ${error}`) - } - - if (!["admin", "write"].includes(permission)) throw new Error(`User ${actor} does not have write permissions`) -} - -function buildComment(content: string) { - const runId = process.env.GITHUB_RUN_ID! - const runUrl = `/${owner}/${repo}/actions/runs/${runId}` - return [content, "\n\n", shareUrl ? `[view session](${shareUrl}) | ` : "", `[view log](${runUrl})`].join("") -} - -async function createComment(body: string) { - console.log("Creating comment...") - return await octoRest.rest.issues.createComment({ - owner, - repo, - issue_number: issueId, - body: buildComment(body), - }) -} - -async function updateComment(body: string) { - console.log("Updating comment...") - return await octoRest.rest.issues.updateComment({ - owner, - repo, - comment_id: commentId, - body: buildComment(body), - }) -} - -function generateBranchName() { - const type = state.type === "issue" ? "issue" : "pr" - const timestamp = new Date() - .toISOString() - .replace(/[:-]/g, "") - .replace(/\.\d{3}Z/, "") - .split("T") - .join("_") - return `opencode/${type}${issueId}-${timestamp}` -} - -async function pushToCurrentBranch(summary: string) { - console.log("Pushing to current branch...") - await $`git add .` - await $`git commit -m "${summary} - -Co-authored-by: ${actor} <${actor}@users.noreply.github.com>"` - await $`git push` -} - -async function pushToForkBranch(summary: string, pr: GitHubPullRequest) { - console.log("Pushing to fork branch...") - - const remoteBranch = pr.headRefName - - await $`git add .` - await $`git commit -m "${summary} - -Co-authored-by: ${actor} <${actor}@users.noreply.github.com>"` - await $`git push fork HEAD:${remoteBranch}` -} - -async function pushToNewBranch(summary: string) { - console.log("Pushing to new branch...") - const branch = generateBranchName() - await $`git checkout -b ${branch}` - await $`git add .` - await $`git commit -m "${summary} - -Co-authored-by: ${actor} <${actor}@users.noreply.github.com>"` - await $`git push -u origin ${branch}` - return branch -} - -async function createPR(base: string, branch: string, title: string, body: string) { - console.log("Creating pull request...") - const pr = await octoRest.rest.pulls.create({ - owner, - repo, - head: branch, - base, - title, - body: buildComment(body), - }) - return pr.data.number -} - -async function runOpencode( - prompt: string, - opts?: { - share?: boolean - }, -) { - console.log("Running opencode...") - - const promptPath = path.join(os.tmpdir(), "PROMPT") - await Bun.write(promptPath, prompt) - const ret = await $`cat ${promptPath} | opencode run -m ${process.env.INPUT_MODEL} ${opts?.share ? "--share" : ""}` - return { - stdout: ret.stdout.toString().trim(), - stderr: ret.stderr.toString().trim(), - } -} - -async function branchIsDirty() { - console.log("Checking if branch is dirty...") - const ret = await $`git status --porcelain` - return ret.stdout.toString().trim().length > 0 -} - -async function fetchRepo() { - return await octoRest.rest.repos.get({ owner, repo }) -} - -async function fetchIssue() { - console.log("Fetching prompt data for issue...") - const issueResult = await octoGraph<IssueQueryResponse>( - ` -query($owner: String!, $repo: String!, $number: Int!) { - repository(owner: $owner, name: $repo) { - issue(number: $number) { - title - body - author { - login - } - createdAt - state - comments(first: 100) { - nodes { - id - databaseId - body - author { - login - } - createdAt - } - } - } - } -}`, - { - owner, - repo, - number: issueId, - }, - ) - - const issue = issueResult.repository.issue - if (!issue) throw new Error(`Issue #${issueId} not found`) - - return issue -} - -function buildPromptDataForIssue(issue: GitHubIssue) { - const comments = (issue.comments?.nodes || []) - .filter((c) => { - const id = parseInt(c.databaseId) - return id !== commentId && id !== payload.comment.id - }) - .map((c) => ` - ${c.author.login} at ${c.createdAt}: ${c.body}`) - - return [ - "Here is the context for the issue:", - `- Title: ${issue.title}`, - `- Body: ${issue.body}`, - `- Author: ${issue.author.login}`, - `- Created At: ${issue.createdAt}`, - `- State: ${issue.state}`, - ...(comments.length > 0 ? ["- Comments:", ...comments] : []), - ].join("\n") -} - -async function fetchPR() { - console.log("Fetching prompt data for PR...") - const prResult = await octoGraph<PullRequestQueryResponse>( - ` -query($owner: String!, $repo: String!, $number: Int!) { - repository(owner: $owner, name: $repo) { - pullRequest(number: $number) { - title - body - author { - login - } - baseRefName - headRefName - headRefOid - createdAt - additions - deletions - state - baseRepository { - nameWithOwner - } - headRepository { - nameWithOwner - } - commits(first: 100) { - totalCount - nodes { - commit { - oid - message - author { - name - email - } - } - } - } - files(first: 100) { - nodes { - path - additions - deletions - changeType - } - } - comments(first: 100) { - nodes { - id - databaseId - body - author { - login - } - createdAt - } - } - reviews(first: 100) { - nodes { - id - databaseId - author { - login - } - body - state - submittedAt - comments(first: 100) { - nodes { - id - databaseId - body - path - line - author { - login - } - createdAt - } - } - } - } - } - } -}`, - { - owner, - repo, - number: issueId, - }, - ) - - const pr = prResult.repository.pullRequest - if (!pr) throw new Error(`PR #${issueId} not found`) - - return pr -} - -function buildPromptDataForPR(pr: GitHubPullRequest) { - const comments = (pr.comments?.nodes || []) - .filter((c) => { - const id = parseInt(c.databaseId) - return id !== commentId && id !== payload.comment.id - }) - .map((c) => ` - ${c.author.login} at ${c.createdAt}: ${c.body}`) - - const files = (pr.files.nodes || []).map((f) => ` - ${f.path} (${f.changeType}) +${f.additions}/-${f.deletions}`) - const reviewData = (pr.reviews.nodes || []).map((r) => { - const comments = (r.comments.nodes || []).map((c) => ` - ${c.path}:${c.line ?? "?"}: ${c.body}`) - return [ - ` - ${r.author.login} at ${r.submittedAt}:`, - ` - Review body: ${r.body}`, - ...(comments.length > 0 ? [" - Comments:", ...comments] : []), - ] - }) - - return [ - "Here is the context for the pull request:", - `- Title: ${pr.title}`, - `- Body: ${pr.body}`, - `- Author: ${pr.author.login}`, - `- Created At: ${pr.createdAt}`, - `- Base Branch: ${pr.baseRefName}`, - `- Head Branch: ${pr.headRefName}`, - `- State: ${pr.state}`, - `- Additions: ${pr.additions}`, - `- Deletions: ${pr.deletions}`, - `- Total Commits: ${pr.commits.totalCount}`, - `- Changed Files: ${pr.files.nodes.length} files`, - ...(comments.length > 0 ? ["- Comments:", ...comments] : []), - ...(files.length > 0 ? ["- Changed files:", ...files] : []), - ...(reviewData.length > 0 ? ["- Reviews:", ...reviewData] : []), - ].join("\n") -} - -async function revokeAppToken() { - if (!appToken) return - - await fetch("https://api.github.com/installation/token", { - method: "DELETE", - headers: { - Authorization: `Bearer ${appToken}`, - Accept: "application/vnd.github+json", - "X-GitHub-Api-Version": "2022-11-28", - }, - }) -} diff --git a/sdks/github/src/types.ts b/sdks/github/src/types.ts deleted file mode 100644 index fe0058fbd..000000000 --- a/sdks/github/src/types.ts +++ /dev/null @@ -1,103 +0,0 @@ -// Types for GitHub GraphQL query responses -export type GitHubAuthor = { - login: string; - name?: string; -}; - -export type GitHubComment = { - id: string; - databaseId: string; - body: string; - author: GitHubAuthor; - createdAt: string; -}; - -export type GitHubReviewComment = GitHubComment & { - path: string; - line: number | null; -}; - -export type GitHubCommit = { - oid: string; - message: string; - author: { - name: string; - email: string; - }; -}; - -export type GitHubFile = { - path: string; - additions: number; - deletions: number; - changeType: string; -}; - -export type GitHubReview = { - id: string; - databaseId: string; - author: GitHubAuthor; - body: string; - state: string; - submittedAt: string; - comments: { - nodes: GitHubReviewComment[]; - }; -}; - -export type GitHubPullRequest = { - title: string; - body: string; - author: GitHubAuthor; - baseRefName: string; - headRefName: string; - headRefOid: string; - createdAt: string; - additions: number; - deletions: number; - state: string; - baseRepository: { - nameWithOwner: string; - }; - headRepository: { - nameWithOwner: string; - }; - commits: { - totalCount: number; - nodes: Array<{ - commit: GitHubCommit; - }>; - }; - files: { - nodes: GitHubFile[]; - }; - comments: { - nodes: GitHubComment[]; - }; - reviews: { - nodes: GitHubReview[]; - }; -}; - -export type GitHubIssue = { - title: string; - body: string; - author: GitHubAuthor; - createdAt: string; - state: string; - comments: { - nodes: GitHubComment[]; - }; -}; - -export type PullRequestQueryResponse = { - repository: { - pullRequest: GitHubPullRequest; - }; -}; - -export type IssueQueryResponse = { - repository: { - issue: GitHubIssue; - }; -}; diff --git a/sdks/github/sst-env.d.ts b/sdks/github/sst-env.d.ts deleted file mode 100644 index b6a7e9066..000000000 --- a/sdks/github/sst-env.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* This file is auto-generated by SST. Do not edit. */ -/* tslint:disable */ -/* eslint-disable */ -/* deno-fmt-ignore-file */ - -/// <reference path="../../sst-env.d.ts" /> - -import "sst" -export {}
\ No newline at end of file diff --git a/sdks/github/tsconfig.json b/sdks/github/tsconfig.json deleted file mode 100644 index 59435b49c..000000000 --- a/sdks/github/tsconfig.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "compilerOptions": { - // Environment setup & latest features - "lib": ["ESNext"], - "target": "ESNext", - "module": "ESNext", - "moduleDetection": "force", - "jsx": "react-jsx", - "allowJs": true, - - // Bundler mode - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - - // Best practices - "strict": true, - "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - - // Some stricter flags (disabled by default) - "noUnusedLocals": false, - "noUnusedParameters": false, - "noPropertyAccessFromIndexSignature": false - } -} |
