1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- import { NextResponse } from 'next/server'
- import semver from 'semver'
- import { Octokit } from '@octokit/rest'
- import { RequestError } from '@octokit/types'
- const octokit = new Octokit()
- export async function GET(req: Request) {
- const { searchParams } = new URL(req.url)
- const os = searchParams.get('os') || ''
- const version = searchParams.get('version') || ''
- if (!version) {
- return new Response('not found', { status: 404 })
- }
- try {
- const { data } = await octokit.repos.getLatestRelease({
- owner: 'jmorganca',
- repo: 'ollama',
- })
- // todo: get the correct asset for the current arch/os
- const asset = data.assets.find(a => a.name.toLowerCase().includes(os))
- if (!asset) {
- return new Response('not found', { status: 404 })
- }
- if (semver.lt(version, data.tag_name)) {
- return NextResponse.json({ version: data.tag_name, url: asset.browser_download_url })
- }
- return new Response('up to date', { status: 204 })
- } catch (error) {
- const e = error as RequestError
- if (e.status === 404) {
- return new Response('not found', { status: 404 })
- }
- return new Response('internal server error', { status: 500 })
- }
- }
|