Skip to content
Snippets Groups Projects
Select Git revision
  • 5459eeadf9bca0910e3ae15eef9d09b3be6ebf8d
  • master default protected
  • backslash
  • nickname-match-configs
  • genofire/leds_rgb_get_state
  • genofire/rockets-state
  • genofire/ble-follow-py
  • plaetzchen/ios-workaround
  • blinkisync-as-preload
  • genofire/haule-ble-fs-deactive
  • schneider/max30001-pycardium
  • schneider/max30001-epicaridum
  • schneider/max30001
  • schneider/stream-locks
  • ios-workarounds
  • schneider/fundamental-test
  • schneider/ble-buffers
  • schneider/maxim-sdk-update
  • ch3/splashscreen
  • koalo/bhi160-works-but-dirty
  • koalo/wip/i2c-for-python
  • v1.9
  • v1.8
  • v1.7
  • v1.6
  • v1.5
  • v1.4
  • v1.3
  • v1.2
  • v1.1
  • v1.0
  • release-1
  • bootloader-v1
  • v0.0
34 results

main.c

Blame
  • Forked from card10 / firmware
    Source project has a limited visibility.
    server_releases.go 2.42 KiB
    package main
    
    import (
    	"context"
    	"encoding/json"
    	"fmt"
    	"net/http"
    	"net/url"
    	"time"
    )
    
    type GLAssetLink struct {
    	ID      int64  `json:"id"`
    	Name    string `json:"name"`
    	TagName string `json:"tag_name"`
    	URL     string `json:"url"`
    }
    
    type GLRelease struct {
    	Name       string    `json:"name"`
    	TagName    string    `json:"tag_name"`
    	ReleasedAt time.Time `json:"released_at"`
    	Assets     struct {
    		Links []GLAssetLink `json:"links"`
    	} `json:"assets"`
    }
    
    func getReleases(ctx context.Context) ([]GLRelease, error) {
    	path := fmt.Sprintf("https://%s/api/v4/projects/%s/releases?order_by=created_at", flagGitlabHost, url.PathEscape(flagGitlabProject))
    	req, err := http.NewRequestWithContext(ctx, "GET", path, nil)
    	if err != nil {
    		return nil, fmt.Errorf("when building request: %w", err)
    	}
    	res, err := http.DefaultTransport.RoundTrip(req)
    	if err != nil {
    		return nil, fmt.Errorf("when performing request: %w", err)
    	}
    	defer res.Body.Close()
    
    	if res.StatusCode != 200 {
    		return nil, fmt.Errorf("invalid response code %d", res.StatusCode)
    	}
    
    	var releases []GLRelease
    	j := json.NewDecoder(res.Body)
    	err = j.Decode(&releases)
    	if err != nil {
    		return nil, fmt.Errorf("when performing request: %w", err)
    	}
    	return releases, nil
    }
    
    func (s *server) handleReleases(w http.ResponseWriter, r *http.Request) {
    	ctx := r.Context()
    	releases, err := s.getReleases(ctx)
    	if err != nil {
    		return
    	}
    
    	type partition struct {
    		Name   string `json:"name"`
    		URL    string `json:"url"`
    		Offset string `json:"offset"`
    	}
    
    	type release struct {
    		Name       string      `json:"name"`
    		Tag        string      `json:"tag"`
    		Partitions []partition `json:"partitions"`
    	}