arran4

joined 2 years ago
[–] [email protected] 1 points 11 months ago* (last edited 11 months ago)

It's probably great for bulk as it gives you something close to what you would expect. I imagine it would be different for things that are specific to the lore, world, etc.

Could mean that there is a lot more detail in games, and a lot might even be unintentional.

[–] [email protected] 2 points 11 months ago

Is it Space Odyssey?

[–] [email protected] 2 points 11 months ago

The fact that is is from LA Times shows that it's still significant though

[–] [email protected] 9 points 11 months ago* (last edited 11 months ago)

Sounds like a regulatory solution is needed. The intersection where domestic policy impacts international.

[–] [email protected] 19 points 11 months ago (1 children)

As in part of a review process?

Things like:

  • Software update process
  • Installing software which isn't in a repository
  • Seeing how the community is for support ?
[–] [email protected] 2 points 11 months ago

Start using chatgpt to write the responses?

[–] [email protected] 2 points 11 months ago

This.

Thanks to Meta BTRFS is apparently got/getting it to a certain extent too: https://youtu.be/6YIc2fVLVPU?si=ngiHWS0fw2zIHf2M

[–] [email protected] 6 points 11 months ago

Back before the media decided it wasn't a competitor but rather a potential profit source. I do think the government does need to have it's own alternatives (obviously not identical more on this one day) for other reasons, such as for it's own media releases, but more internationally coordinated appropriate & considered legislation is probably better.

[–] [email protected] 43 points 1 year ago (6 children)

This. Although I'm not sure if it's about in-app display, but it needs to be on the store and on a website somewhere.

[–] [email protected] 2 points 1 year ago (1 children)

I've been using AnyType for this starting a couple weeks ago.

[–] [email protected] -4 points 1 year ago

I asked chatgpt to write a go program for this, this looks roughly correct (I have used both libraries before) obviously this won't be enough for your particular use case. I imagine you can integrate an RSS feed to your site, however if you're using something like hugo perhaps output it as a csv.

Super low effort but a good start I think:

package main

import (
	"fmt"
	"log"
	"os"
	"strings"
	"time"

	git "github.com/go-git/go-git/v5"
	rss "github.com/jteeuwen/go-pkg-rss"
)

const (
	timeout = 5 // timeout in seconds for the RSS feed generation
)

// Repository represents a git repository with its URL
type Repository struct {
	URL string
}

// Repositories is the list of git repositories
var Repositories = []Repository{
	{URL: "https://github.com/owner/repo1"},
	{URL: "https://github.com/owner/repo2"},
	// Add more repositories here
}

// FetchLatestTag fetches the latest tag from a git repository
func FetchLatestTag(repoURL string) (string, string, error) {
	// Clone the repository to a temporary directory
	dir, err := os.MkdirTemp("", "repo")
	if err != nil {
		return "", "", err
	}
	defer os.RemoveAll(dir)

	_, err = git.PlainClone(dir, true, &git.CloneOptions{
		URL:      repoURL,
		Progress: os.Stdout,
	})
	if err != nil {
		return "", "", err
	}

	repo, err := git.PlainOpen(dir)
	if err != nil {
		return "", "", err
	}

	tags, err := repo.Tags()
	if err != nil {
		return "", "", err
	}

	var latestTag string
	var latestCommitTime time.Time

	err = tags.ForEach(func(ref *plumbing.Reference) error {
		tag := ref.Name().Short()
		commit, err := repo.CommitObject(ref.Hash())
		if err != nil {
			return err
		}
		if commit.Committer.When.After(latestCommitTime) {
			latestCommitTime = commit.Committer.When
			latestTag = tag
		}
		return nil
	})
	if err != nil {
		return "", "", err
	}

	return latestTag, latestCommitTime.Format(time.RFC1123Z), nil
}

// GenerateRSS generates an RSS feed from the latest tags of the repositories
func GenerateRSS() string {
	feed := rss.Feed{
		Title:       "Latest Tags from Git Repositories",
		Link:        &rss.Link{Href: "http://example.com/"},
		Description: "This feed provides the latest tags from a list of git repositories.",
		Created:     time.Now(),
	}

	for _, repo := range Repositories {
		tag, date, err := FetchLatestTag(repo.URL)
		if err != nil {
			log.Printf("Error fetching latest tag for repository %s: %v", repo.URL, err)
			continue
		}
		feed.Items = append(feed.Items, &rss.Item{
			Title:       fmt.Sprintf("Latest tag for %s: %s", repo.URL, tag),
			Link:        &rss.Link{Href: repo.URL},
			Description: fmt.Sprintf("The latest tag for repository %s is %s, created on %s.", repo.URL, tag, date),
			Created:     time.Now(),
		})
	}

	var rssFeed strings.Builder
	rssFeed.WriteString(xml.Header)
	if err := feed.Write(&rssFeed); err != nil {
		log.Fatalf("Error generating RSS feed: %v", err)
	}

	return rssFeed.String()
}

func main() {
	rssFeed := GenerateRSS()
	fmt.Println(rssFeed)
}
view more: ‹ prev next ›