Browse Source
Merge branch 'louislam:master' into master
pull/911/head
Ioma Taani
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with
124 additions and
32 deletions
-
dockerfile
-
extra/upload-github-release-asset.sh
-
src/components/Login.vue
-
src/layouts/Layout.vue
-
src/pages/Setup.vue
|
|
@ -24,7 +24,7 @@ FROM release AS nightly |
|
|
|
RUN npm run mark-as-nightly |
|
|
|
|
|
|
|
# Upload the artifact to Github |
|
|
|
FROM node:14-buster-slim AS upload-artifact |
|
|
|
FROM louislam/uptime-kuma:base-debian AS upload-artifact |
|
|
|
WORKDIR / |
|
|
|
RUN apt update && \ |
|
|
|
apt --yes install curl file |
|
|
@ -32,17 +32,18 @@ RUN apt update && \ |
|
|
|
ARG GITHUB_TOKEN |
|
|
|
ARG TARGETARCH |
|
|
|
ARG PLATFORM=debian |
|
|
|
ARG VERSION=1.5.0 |
|
|
|
|
|
|
|
ARG VERSION |
|
|
|
ARG FILE=$PLATFORM-$TARGETARCH-$VERSION.tar.gz |
|
|
|
ARG DIST=dist.tar.gz |
|
|
|
|
|
|
|
COPY --from=build /app /app |
|
|
|
RUN chmod +x /app/extra/upload-github-release-asset.sh |
|
|
|
|
|
|
|
RUN FILE=uptime-kuma.tar.gz |
|
|
|
RUN tar -czf $FILE app |
|
|
|
# Full Build |
|
|
|
# RUN tar -zcvf $FILE app |
|
|
|
# RUN /app/extra/upload-github-release-asset.sh github_api_token=$GITHUB_TOKEN owner=louislam repo=uptime-kuma tag=$VERSION filename=$FILE |
|
|
|
|
|
|
|
RUN curl \ |
|
|
|
-H "Authorization: token $GITHUB_TOKEN" \ |
|
|
|
-H "Content-Type: $(file -b --mime-type $FILE)" \ |
|
|
|
--data-binary @$FILE \ |
|
|
|
"https://uploads.github.com/repos/louislam/uptime-kuma/releases/$VERSION/assets?name=$(basename $FILE)" |
|
|
|
# Dist only |
|
|
|
RUN cd /app && tar -zcvf $DIST dist |
|
|
|
RUN /app/extra/upload-github-release-asset.sh github_api_token=$GITHUB_TOKEN owner=louislam repo=uptime-kuma tag=$VERSION filename=$DIST |
|
|
|
|
|
|
|
|
|
@ -0,0 +1,64 @@ |
|
|
|
#!/usr/bin/env bash |
|
|
|
# |
|
|
|
# Author: Stefan Buck |
|
|
|
# License: MIT |
|
|
|
# https://gist.github.com/stefanbuck/ce788fee19ab6eb0b4447a85fc99f447 |
|
|
|
# |
|
|
|
# |
|
|
|
# This script accepts the following parameters: |
|
|
|
# |
|
|
|
# * owner |
|
|
|
# * repo |
|
|
|
# * tag |
|
|
|
# * filename |
|
|
|
# * github_api_token |
|
|
|
# |
|
|
|
# Script to upload a release asset using the GitHub API v3. |
|
|
|
# |
|
|
|
# Example: |
|
|
|
# |
|
|
|
# upload-github-release-asset.sh github_api_token=TOKEN owner=stefanbuck repo=playground tag=v0.1.0 filename=./build.zip |
|
|
|
# |
|
|
|
|
|
|
|
# Check dependencies. |
|
|
|
set -e |
|
|
|
xargs=$(which gxargs || which xargs) |
|
|
|
|
|
|
|
# Validate settings. |
|
|
|
[ "$TRACE" ] && set -x |
|
|
|
|
|
|
|
CONFIG=$@ |
|
|
|
|
|
|
|
for line in $CONFIG; do |
|
|
|
eval "$line" |
|
|
|
done |
|
|
|
|
|
|
|
# Define variables. |
|
|
|
GH_API="https://api.github.com" |
|
|
|
GH_REPO="$GH_API/repos/$owner/$repo" |
|
|
|
GH_TAGS="$GH_REPO/releases/tags/$tag" |
|
|
|
AUTH="Authorization: token $github_api_token" |
|
|
|
WGET_ARGS="--content-disposition --auth-no-challenge --no-cookie" |
|
|
|
CURL_ARGS="-LJO#" |
|
|
|
|
|
|
|
if [[ "$tag" == 'LATEST' ]]; then |
|
|
|
GH_TAGS="$GH_REPO/releases/latest" |
|
|
|
fi |
|
|
|
|
|
|
|
# Validate token. |
|
|
|
curl -o /dev/null -sH "$AUTH" $GH_REPO || { echo "Error: Invalid repo, token or network issue!"; exit 1; } |
|
|
|
|
|
|
|
# Read asset tags. |
|
|
|
response=$(curl -sH "$AUTH" $GH_TAGS) |
|
|
|
|
|
|
|
# Get ID of the asset based on given filename. |
|
|
|
eval $(echo "$response" | grep -m 1 "id.:" | grep -w id | tr : = | tr -cd '[[:alnum:]]=') |
|
|
|
[ "$id" ] || { echo "Error: Failed to get release id for tag: $tag"; echo "$response" | awk 'length($0)<100' >&2; exit 1; } |
|
|
|
|
|
|
|
# Upload asset |
|
|
|
echo "Uploading asset... " |
|
|
|
|
|
|
|
# Construct url |
|
|
|
GH_ASSET="https://uploads.github.com/repos/$owner/$repo/releases/$id/assets?name=$(basename $filename)" |
|
|
|
|
|
|
|
curl "$GITHUB_OAUTH_BASIC" --data-binary @"$filename" -H "Authorization: token $github_api_token" -H "Content-Type: application/octet-stream" $GH_ASSET |
|
|
@ -52,7 +52,7 @@ export default { |
|
|
|
token: "", |
|
|
|
res: null, |
|
|
|
tokenRequired: false, |
|
|
|
} |
|
|
|
}; |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
submit() { |
|
|
@ -60,21 +60,20 @@ export default { |
|
|
|
|
|
|
|
this.$root.login(this.username, this.password, this.token, (res) => { |
|
|
|
this.processing = false; |
|
|
|
console.log(res) |
|
|
|
console.log(res); |
|
|
|
|
|
|
|
if (res.tokenRequired) { |
|
|
|
this.tokenRequired = true; |
|
|
|
} else { |
|
|
|
this.res = res; |
|
|
|
} |
|
|
|
}) |
|
|
|
}); |
|
|
|
}, |
|
|
|
}, |
|
|
|
} |
|
|
|
}; |
|
|
|
</script> |
|
|
|
|
|
|
|
<style scoped> |
|
|
|
|
|
|
|
<style lang="scss" scoped> |
|
|
|
.form-container { |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
@ -82,8 +81,17 @@ export default { |
|
|
|
padding-bottom: 40px; |
|
|
|
} |
|
|
|
|
|
|
|
.form { |
|
|
|
.form-floating { |
|
|
|
> label { |
|
|
|
padding-left: 1.3rem; |
|
|
|
} |
|
|
|
|
|
|
|
> .form-control { |
|
|
|
padding-left: 1.3rem; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.form { |
|
|
|
width: 100%; |
|
|
|
max-width: 330px; |
|
|
|
padding: 15px; |
|
|
|
|
|
@ -23,12 +23,12 @@ |
|
|
|
<font-awesome-icon icon="stream" /> {{ $t("Status Page") }} |
|
|
|
</a> |
|
|
|
</li> |
|
|
|
<li class="nav-item me-2"> |
|
|
|
<li v-if="$root.loggedIn" class="nav-item me-2"> |
|
|
|
<router-link to="/dashboard" class="nav-link"> |
|
|
|
<font-awesome-icon icon="tachometer-alt" /> {{ $t("Dashboard") }} |
|
|
|
</router-link> |
|
|
|
</li> |
|
|
|
<li class="nav-item"> |
|
|
|
<li v-if="$root.loggedIn" class="nav-item"> |
|
|
|
<router-link to="/settings" class="nav-link"> |
|
|
|
<font-awesome-icon icon="cog" /> {{ $t("Settings") }} |
|
|
|
</router-link> |
|
|
|
|
|
@ -46,8 +46,8 @@ |
|
|
|
</template> |
|
|
|
|
|
|
|
<script> |
|
|
|
import { useToast } from "vue-toastification" |
|
|
|
const toast = useToast() |
|
|
|
import { useToast } from "vue-toastification"; |
|
|
|
const toast = useToast(); |
|
|
|
|
|
|
|
export default { |
|
|
|
data() { |
|
|
@ -56,7 +56,7 @@ export default { |
|
|
|
username: "", |
|
|
|
password: "", |
|
|
|
repeatPassword: "", |
|
|
|
} |
|
|
|
}; |
|
|
|
}, |
|
|
|
watch: { |
|
|
|
"$i18n.locale"() { |
|
|
@ -66,7 +66,7 @@ export default { |
|
|
|
mounted() { |
|
|
|
this.$root.getSocket().emit("needSetup", (needSetup) => { |
|
|
|
if (! needSetup) { |
|
|
|
this.$router.push("/") |
|
|
|
this.$router.push("/"); |
|
|
|
} |
|
|
|
}); |
|
|
|
}, |
|
|
@ -75,31 +75,30 @@ export default { |
|
|
|
this.processing = true; |
|
|
|
|
|
|
|
if (this.password !== this.repeatPassword) { |
|
|
|
toast.error("Repeat password do not match.") |
|
|
|
toast.error("Repeat password do not match."); |
|
|
|
this.processing = false; |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
this.$root.getSocket().emit("setup", this.username, this.password, (res) => { |
|
|
|
this.processing = false; |
|
|
|
this.$root.toastRes(res) |
|
|
|
this.$root.toastRes(res); |
|
|
|
|
|
|
|
if (res.ok) { |
|
|
|
this.processing = true; |
|
|
|
|
|
|
|
this.$root.login(this.username, this.password, "", (res) => { |
|
|
|
this.$root.login(this.username, this.password, "", () => { |
|
|
|
this.processing = false; |
|
|
|
this.$router.push("/") |
|
|
|
}) |
|
|
|
this.$router.push("/"); |
|
|
|
}); |
|
|
|
} |
|
|
|
}) |
|
|
|
}); |
|
|
|
}, |
|
|
|
}, |
|
|
|
} |
|
|
|
}; |
|
|
|
</script> |
|
|
|
|
|
|
|
<style scoped> |
|
|
|
|
|
|
|
<style lang="scss" scoped> |
|
|
|
.form-container { |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
@ -107,6 +106,26 @@ export default { |
|
|
|
padding-bottom: 40px; |
|
|
|
} |
|
|
|
|
|
|
|
.form-floating { |
|
|
|
> .form-select { |
|
|
|
padding-left: 1.3rem; |
|
|
|
padding-top: 1.525rem; |
|
|
|
line-height: 1.35; |
|
|
|
|
|
|
|
~ label { |
|
|
|
padding-left: 1.3rem; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
> label { |
|
|
|
padding-left: 1.3rem; |
|
|
|
} |
|
|
|
|
|
|
|
> .form-control { |
|
|
|
padding-left: 1.3rem; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.form { |
|
|
|
|
|
|
|
width: 100%; |
|
|
|