Update project to go mod, proper Docker support, CI.

This commit is contained in:
Gabriel Simmer 2022-03-19 12:52:20 +00:00
parent 6d86152969
commit 64c0446453
10 changed files with 79 additions and 191 deletions

View file

@ -22,3 +22,7 @@ feed\.rss
.travis\.yml
_config\.yml
Dockerfile
assets/

View file

@ -0,0 +1,28 @@
name: push gmemstr/pogo:dev
on:
push:
paths:
- '**.go'
branches-ignore:
- 'master'
jobs:
docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
-
name: Login to DockerHub
uses: docker/login-action@v1
with:
registry: ghcr.io
username: gmemstr
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
push: true
tags: ghcr.io/gmemstr/pogo:dev

28
.github/workflows/docker-build-push.yml vendored Normal file
View file

@ -0,0 +1,28 @@
name: push gmemstr/pogo:stable
on:
push:
paths:
- '**.go'
branches:
- 'master'
jobs:
docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
-
name: Login to DockerHub
uses: docker/login-action@v1
with:
registry: ghcr.io
username: gmemstr
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
push: true
tags: ghcr.io/gmemstr/pogo:stable

2
.gitignore vendored
View file

@ -26,3 +26,5 @@ assets/config/users\.db
run\.lockfile
\.lock
assets/

View file

@ -1,28 +1,21 @@
# Use latest golang image
FROM golang:latest
FROM golang:stretch as builder
RUN mkdir -p /go/src \
&& mkdir -p /go/bin \
&& mkdir -p /go/pkg
ENV GOPATH=/go
ENV PATH=$GOPATH/bin:$PATH
WORKDIR /build/pogo
COPY go.mod go.sum ./
RUN go mod download
# Set working directory
WORKDIR $GOPATH/src/github.com/gmemstr/pogo
COPY . .
# Add source to container so we can build
ADD . $GOPATH/src/github.com/gmemstr/pogo
RUN GOOS=linux go build -ldflags "-s -w"
# 1. Install make and dependencies
# 2. Install Go dependencies
# 3. Build named Linux binary and allow execution
# 4. List directory structure (for debugging really)\
# 5. Make empty podcast direcory
# 6. Create empty feed files
RUN go get github.com/tools/godep && \
godep restore && \
go build -o pogoapp && chmod +x pogoapp
FROM debian:stretch-slim
RUN apt update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
WORKDIR /app
EXPOSE 3000
CMD ./pogoapp
COPY --from=builder /build/pogo/pogo pogo
ENTRYPOINT ["/app/pogo"]

51
Godeps/Godeps.json generated
View file

@ -1,51 +0,0 @@
{
"ImportPath": "github.com/gmemstr/pogo",
"GoVersion": "go1.8",
"GodepVersion": "v79",
"Deps": [
{
"ImportPath": "github.com/fsnotify/fsnotify",
"Comment": "v1.4.2-6-g4da3e2c",
"Rev": "4da3e2cfbabc9f751898f250b49f2439785783a1"
},
{
"ImportPath": "github.com/google/go-github/github",
"Rev": "fbfee053c26dab3772adfc7799d995eed379133e"
},
{
"ImportPath": "github.com/google/go-querystring/query",
"Rev": "53e6ce116135b80d037921a7fdd5138cf32d7a8a"
},
{
"ImportPath": "github.com/gorilla/feeds",
"Comment": "v1.0.0",
"Rev": "4b936b5221c53c99fcd4b15ac0b8c38ff490ab89"
},
{
"ImportPath": "github.com/gorilla/mux",
"Comment": "v1.4.0-10-g18fca31",
"Rev": "18fca31550181693b3a834a15b74b564b3605876"
},
{
"ImportPath": "github.com/mattn/go-sqlite3",
"Comment": "v1.3.0",
"Rev": "5160b48509cf5c877bc22c11c373f8c7738cdb38"
},
{
"ImportPath": "golang.org/x/crypto/bcrypt",
"Rev": "9419663f5a44be8b34ca85f08abc5fe1be11f8a3"
},
{
"ImportPath": "golang.org/x/crypto/blowfish",
"Rev": "9419663f5a44be8b34ca85f08abc5fe1be11f8a3"
},
{
"ImportPath": "golang.org/x/net/context",
"Rev": "3da985ce5951d99de868be4385f21ea6c2b22f24"
},
{
"ImportPath": "golang.org/x/sys/unix",
"Rev": "0b25a408a50076fbbcae6b7ac0ea5fbb0b085e79"
}
]
}

5
Godeps/Readme generated
View file

@ -1,5 +0,0 @@
This directory tree is generated automatically by godep.
Please do not edit.
See https://github.com/tools/godep for more information.

View file

@ -1,8 +1 @@
{
"Name": "Pogo Test Feed",
"Host": "Gabriel Simmer",
"Email": "admin@localhost",
"Description": "Discussion about open source projects on the internet.",
"Image": "localhost:3000/assets/logo-xs.png",
"PodcastUrl": "http://localhost:3000"
}
{"Name":"Pogo Podcast","Host":"John Doe","Email":"johndoe@localhost","Description":"A Podcast About Stuff","Image":"localhost:3000/assets/podcastimage.png","PodcastUrl":"http://localhost:3000"}

View file

@ -1,25 +1 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Pogo Publish</title>
<link rel="stylesheet" href="/assets/styles.css">
</head>
<body>
<div class="container">
<div id="app">
<nav>
<router-link to="/publish">Publish</router-link> <router-link to="/manage">Episodes</router-link> <router-link to="/theme">Theme</router-link> <router-link to="/users">Users</router-link> <button onclick="logout()">Logout</button></nav>
<h1>{{ header }}</h1>
<router-view></router-view>
</div>
</div>
<footer>
<p>Pogo licensed under the GPLv3</p>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.8/vue.min.js"></script>
<script src="https://unpkg.com/vue-router@2.7.0/dist/vue-router.js"></script>
<script src="/assets/app.js"></script>
</body>
</html>
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>Pogo LAUNCHPAD (Admin)</title><link href=/static/css/app.2c4137b696e2d4b140b031b27d7e5a1a.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.f80f6e311dcc9285e615.js></script><script type=text/javascript src=/static/js/vendor.5973cf24864eecc78c48.js></script><script type=text/javascript src=/static/js/app.1261f4d104eef89553c2.js></script></body></html>

View file

@ -1,81 +1 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Pogo Loading</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/assets/styles.css">
<!-- Custom CSS stylings from admin -->
<link rel="stylesheet" href="/assets/custom.css">
</head>
<body>
<div class="container">
<div class="main">
<h1 id="title" class="title">Loading</h1>
<h3><a href="/admin" class="adminlink">Admin</a></h3>
<div id="podcasts" class="podcastlist">
</div>
</div>
<footer>
<p>Pogo licensed under the GPLv3 | <a href="/rss">RSS Feed</a>
</footer>
</div>
<script>
/*
* Function for aggregating podcast episodes and
* displaying them.
*
* Will not be written in ES6 _yet_ until all browsers
* support it, avoiding frameworks because of bulk.
*/
get("/json", function(data){
json = JSON.parse(data);
document.title = json.title;
document.getElementById("title").innerHTML = json.title + " DEVELOPMENT MODE";
// Iterate through JSON
for (i=0;i<json.items.length; i++){
var div = document.createElement('div');
div.className = 'podcastitem';
// Hacky date workaround - convert our Go date output to unix timestamp,
// then convert that into a string
// Leaves RSS readers happy and date readable on the frontend.
date = new Date(Date.parse(json.items[i].date_published))
month = date.getMonth()+1;
datestring = date.getDate() + "/" + month + "/" + date.getFullYear();
// Build div for podcast entry
div.innerHTML = '<h3 class="podcasttitle">'+
json.items[i].title+' <small class="podcastdate">'+
datestring+'</small></h3><p class="podcastdesc">'+
json.items[i].summary+'</p><audio controls class="podcastaudio"><source src="'+
json.items[i].url+'">';
// We can safely do this because of how the Go code actually
// generates the .json file - it's consistent as far as I've been able to see
// Preappend so newest is at the top
var element = document.getElementById("podcasts");
element.insertBefore(div, element.firstChild);
}
});
// Wrap xmlHttp into smaller function, I like
// to include this function whenever I need to
// do such a thing
function get(url, callback) {
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
callback(xmlHttp.responseText);
}
xmlHttp.open("GET", url, true);
xmlHttp.send(null);
}
</script>
</body>
</html>
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>Pogo (Loading)</title><link href=/static/css/app.d30c73e61cece4af1cf90f7dfb3c4e01.css rel=stylesheet></head><body><div id=app></div><script></script><script type=text/javascript src=/static/js/manifest.d89179d976625d3cea09.js></script><script type=text/javascript src=/static/js/vendor.c5c1444b51671198fd20.js></script><script type=text/javascript src=/static/js/app.415e639459f313d89125.js></script></body></html>