diff --git a/.gitignore b/.gitignore index 58ebe16..952274d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ build_logs +*.cast diff --git a/asciinema-20240618183800.cast b/asciinema-20240618183800.cast deleted file mode 100644 index 021eba5..0000000 --- a/asciinema-20240618183800.cast +++ /dev/null @@ -1,46 +0,0 @@ -{"version": 2, "width": 207, "height": 25, "timestamp": 1718750280, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}} -[0.256711, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r\u001b]2;aedev@computers-iMac:~/dev/debugreport\u0007\u001b]1;..v/debugreport\u0007"] -[0.261332, "o", "\u001b]7;file://computers-iMac.localdomain/Users/aedev/dev/debugreport\u001b\\"] -[0.276765, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35maedev\u001b[00m\u001b[36m@\u001b[00m\u001b[33mcomputers-iMac\u001b[00m\u001b[31m:\u001b[00m\u001b[36m~/dev/debugreport\u001b[00m\u001b[31m|\u001b[00m\u001b[36m⇒\u001b[00m \u001b[K"] -[0.276846, "o", "\u001b[?1h\u001b=\u001b[?2004h"] -[1.569833, "o", "l"] -[1.585655, "o", "\b\u001b[32ml\u001b[39m"] -[1.586509, "o", "\b\u001b[32ml\u001b[39m\u001b[90ms\u001b[39m\b"] -[1.704188, "o", "\b\u001b[32ml\u001b[32ms\u001b[39m"] -[1.841041, "o", "\u001b[?1l\u001b>"] -[1.841212, "o", "\u001b[?2004l"] -[1.844016, "o", "\r\r\n"] -[1.84507, "o", "\u001b]2;ls -G\u0007\u001b]1;ls\u0007"] -[1.862516, "o", "README.md \u001b[31mbuild.sh\u001b[39;49m\u001b[0m \u001b[1m\u001b[36mdist\u001b[39;49m\u001b[0m install.sh\r\nasciinema-20240618183800.cast \u001b[1m\u001b[36mbuild_logs\u001b[39;49m\u001b[0m go.mod main.go\r\n"] -[1.862743, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] -[1.862912, "o", "\u001b]2;aedev@computers-iMac:~/dev/debugreport\u0007\u001b]1;..v/debugreport\u0007"] -[1.86532, "o", "\u001b]7;file://computers-iMac.localdomain/Users/aedev/dev/debugreport\u001b\\"] -[1.885521, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35maedev\u001b[00m\u001b[36m@\u001b[00m\u001b[33mcomputers-iMac\u001b[00m\u001b[31m:\u001b[00m\u001b[36m~/dev/debugreport\u001b[00m\u001b[31m|\u001b[00m\u001b[36m⇒\u001b[00m \u001b[K"] -[1.885742, "o", "\u001b[?1h\u001b=\u001b[?2004h"] -[3.353476, "o", "o"] -[3.359874, "o", "\b\u001b[1m\u001b[31mo\u001b[0m\u001b[39m"] -[3.360155, "o", "\b\u001b[1m\u001b[31mo\u001b[0m\u001b[39m\u001b[90mpen Sandsara-tracks\u001b[39m\u001b[19D"] -[4.076455, "o", "\b\u001b[1m\u001b[31mo\u001b[1m\u001b[31mk\u001b[0m\u001b[39m\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[18D"] -[4.195769, "o", "\b\b\u001b[1m\u001b[31mo\u001b[1m\u001b[31mk\u001b[1m\u001b[31ma\u001b[0m\u001b[39m"] -[4.451507, "o", "\b\u001b[1m\u001b[31ma\u001b[1m\u001b[31my\u001b[0m\u001b[39m"] -[4.616607, "o", "\b\u001b[1m\u001b[31my\u001b[1m\u001b[31m \u001b[0m\u001b[39m"] -[4.619412, "o", "\b\b\u001b[1m\u001b[31my\u001b[0m\u001b[39m\u001b[0m\u001b[39m "] -[5.413241, "o", "\b\b\b\b\b"] -[5.998918, "o", "\u001b[0m\u001b[39me\u001b[1m\u001b[31mo\u001b[1m\u001b[31mk\u001b[1m\u001b[31ma\u001b[1m\u001b[31my\u001b[0m\u001b[39m \b\b\b\b\b"] -[6.005631, "o", "\b\u001b[1m\u001b[31me"] -[6.235222, "o", "\b\u001b[1m\u001b[31me\u001b[1m\u001b[31mc\u001b[1m\u001b[31mo\u001b[1m\u001b[31mk\u001b[1m\u001b[31ma\u001b[1m\u001b[31my\u001b[0m\u001b[39m \b\b\b\b\b"] -[6.331374, "o", "\u001b[1m\u001b[31mh\u001b[1m\u001b[31mo\u001b[1m\u001b[31mk\u001b[1m\u001b[31ma\u001b[1m\u001b[31my\u001b[0m\u001b[39m \b\b\b\b\b"] -[6.417782, "o", "\u001b[1C\u001b[1m\u001b[31mo\u001b[1m\u001b[31mk\u001b[1m\u001b[31ma\u001b[1m\u001b[31my\u001b[0m\u001b[39m \b\b\b\b\b"] -[6.52071, "o", "\u001b[1m\u001b[31m \u001b[1m\u001b[31mo\u001b[1m\u001b[31mk\u001b[1m\u001b[31ma\u001b[1m\u001b[31my\u001b[0m\u001b[39m \b\b\b\b\b"] -[6.535294, "o", "\b\b\b\b\b\u001b[0m\u001b[32me\u001b[0m\u001b[32mc\u001b[0m\u001b[32mh\u001b[0m\u001b[32mo\u001b[39m\u001b[0m\u001b[39m \u001b[0m\u001b[39mo\u001b[0m\u001b[39mk\u001b[0m\u001b[39ma\u001b[0m\u001b[39my\b\b\b\b"] -[6.986127, "o", "\u001b[?1l\u001b>"] -[6.986177, "o", "\u001b[?2004l"] -[6.989743, "o", "\r\r\n"] -[6.991177, "o", "\u001b]2;echo okay\u0007\u001b]1;echo\u0007"] -[7.024897, "o", "okay\r\n"] -[7.024932, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] -[7.02502, "o", "\u001b]2;aedev@computers-iMac:~/dev/debugreport\u0007\u001b]1;..v/debugreport\u0007"] -[7.027346, "o", "\u001b]7;file://computers-iMac.localdomain/Users/aedev/dev/debugreport\u001b\\"] -[7.040054, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35maedev\u001b[00m\u001b[36m@\u001b[00m\u001b[33mcomputers-iMac\u001b[00m\u001b[31m:\u001b[00m\u001b[36m~/dev/debugreport\u001b[00m\u001b[31m|\u001b[00m\u001b[36m⇒\u001b[00m \u001b[K"] -[7.040286, "o", "\u001b[?1h\u001b=\u001b[?2004h"] -[8.494716, "o", "\u001b[?2004l\r\r\n"] diff --git a/build.sh b/build.sh index 03907e4..5460f13 100755 --- a/build.sh +++ b/build.sh @@ -1,41 +1,46 @@ #!/bin/bash ARCHITECTURES=("linux/amd64" "linux/arm64" "darwin/amd64" "darwin/arm64" "windows/amd64") -PROJECT_NAME=$(basename "$(pwd)") +PROJECTS=("main.go:debugreport" "decodereport.go:decodereport") prepare_build() { mkdir -p dist build_logs if [ ! -f go.mod ]; then - go mod init "$PROJECT_NAME" + go mod init "$(basename "$(pwd)")" fi go mod tidy } build_binary() { - local os=$1 - local arch=$2 - local output="dist/${PROJECT_NAME}_${os}_${arch}" - env GOOS=$os GOARCH=$arch go build -o $output . &> "build_logs/${os}_${arch}.log" + local source_file=$1 + local project_name=$2 + local os=$3 + local arch=$4 + local output="dist/${project_name}_${os}_${arch}" + env GOOS=$os GOARCH=$arch go build -o $output $source_file &> "build_logs/${project_name}_${os}_${arch}.log" if [ $? -ne 0 ]; then - echo "Build failed for $os/$arch" >> "build_logs/error.log" + echo "Build failed for $project_name on $os/$arch" >> "build_logs/error.log" else - echo "Build succeeded for $os/$arch" + echo "Build succeeded for $project_name on $os/$arch" fi if [ "$os" == "linux" ]; then - env GOOS=$os GOARCH=$arch CGO_ENABLED=0 go build -a -ldflags '-extldflags "-static"' -o "${output}_static" . &> "build_logs/${os}_${arch}_static.log" + env GOOS=$os GOARCH=$arch CGO_ENABLED=0 go build -a -ldflags '-extldflags "-static"' -o "${output}_static" $source_file &> "build_logs/${project_name}_${os}_${arch}_static.log" if [ $? -ne 0 ]; then - echo "Static build failed for $os/$arch" >> "build_logs/error.log" + echo "Static build failed for $project_name on $os/$arch" >> "build_logs/error.log" else - echo "Static build succeeded for $os/$arch" + echo "Static build succeeded for $project_name on $os/$arch" fi fi } main() { prepare_build - for arch in "${ARCHITECTURES[@]}"; do - IFS="/" read -r os arch <<< "$arch" - build_binary $os $arch + for project in "${PROJECTS[@]}"; do + IFS=":" read -r source_file project_name <<< "$project" + for arch in "${ARCHITECTURES[@]}"; do + IFS="/" read -r os arch <<< "$arch" + build_binary $source_file $project_name $os $arch + done done echo "Build process completed." } diff --git a/decodereport.go b/decodereport.go new file mode 100644 index 0000000..324c686 --- /dev/null +++ b/decodereport.go @@ -0,0 +1,79 @@ +package main + +import ( + "fmt" + "io" + "net/http" + "os" + "os/exec" + "strings" +) + +// Function to download a file from a URL and save it locally +func downloadFile(url string, fileName string) error { + // Get the data + resp, err := http.Get(url) + if err != nil { + return err + } + defer resp.Body.Close() + + // Create the file + out, err := os.Create(fileName) + if err != nil { + return err + } + defer out.Close() + + // Write the body to file + _, err = io.Copy(out, resp.Body) + return err +} + +func main() { + if len(os.Args) != 2 { + fmt.Println("Usage: ./downloadcast ") + os.Exit(1) + } + + hastebinURL := os.Args[1] + if !strings.HasPrefix(hastebinURL, "https://haste.nixc.us/") { + fmt.Println("Invalid Hastebin URL. Please provide a valid URL from haste.nixc.us") + os.Exit(1) + } + + // Get the key from the URL + parts := strings.Split(hastebinURL, "/") + if len(parts) < 4 { + fmt.Println("Invalid Hastebin URL format") + os.Exit(1) + } + key := parts[len(parts)-1] + + // Build the raw URL for downloading the content + rawURL := fmt.Sprintf("https://haste.nixc.us/raw/%s", key) + fileName := fmt.Sprintf("%s.cast", key) + + fmt.Printf("Downloading from %s to %s\n", rawURL, fileName) + + // Download the file + err := downloadFile(rawURL, fileName) + if err != nil { + fmt.Printf("Error downloading the file: %v\n", err) + os.Exit(1) + } + + fmt.Printf("Downloaded file saved as %s\n", fileName) + + // Optional: Play the downloaded cast file using asciinema + playCmd := exec.Command("asciinema", "play", fileName) + playCmd.Stdout = os.Stdout + playCmd.Stderr = os.Stderr + err = playCmd.Run() + if err != nil { + fmt.Printf("Error playing the cast file: %v\n", err) + os.Exit(1) + } + + fmt.Println("Playback finished.") +} diff --git a/dist/debugreport_darwin_amd64 b/dist/debugreport_darwin_amd64 index b20a53c..e4a5c7b 100755 Binary files a/dist/debugreport_darwin_amd64 and b/dist/debugreport_darwin_amd64 differ diff --git a/dist/debugreport_darwin_arm64 b/dist/debugreport_darwin_arm64 index 65b1355..17b0563 100755 Binary files a/dist/debugreport_darwin_arm64 and b/dist/debugreport_darwin_arm64 differ diff --git a/dist/debugreport_linux_amd64 b/dist/debugreport_linux_amd64 index 7f601ab..ab10348 100755 Binary files a/dist/debugreport_linux_amd64 and b/dist/debugreport_linux_amd64 differ diff --git a/dist/debugreport_linux_amd64_static b/dist/debugreport_linux_amd64_static index 5312898..c05275d 100755 Binary files a/dist/debugreport_linux_amd64_static and b/dist/debugreport_linux_amd64_static differ diff --git a/dist/debugreport_linux_arm64 b/dist/debugreport_linux_arm64 index ad5f903..4ac1ba0 100755 Binary files a/dist/debugreport_linux_arm64 and b/dist/debugreport_linux_arm64 differ diff --git a/dist/debugreport_linux_arm64_static b/dist/debugreport_linux_arm64_static index 6663ab9..a15134f 100755 Binary files a/dist/debugreport_linux_arm64_static and b/dist/debugreport_linux_arm64_static differ diff --git a/dist/debugreport_windows_amd64 b/dist/debugreport_windows_amd64 index 87ee4ea..1814325 100755 Binary files a/dist/debugreport_windows_amd64 and b/dist/debugreport_windows_amd64 differ diff --git a/dist/decodereport_darwin_amd64 b/dist/decodereport_darwin_amd64 new file mode 100755 index 0000000..aa6c780 Binary files /dev/null and b/dist/decodereport_darwin_amd64 differ diff --git a/dist/decodereport_darwin_arm64 b/dist/decodereport_darwin_arm64 new file mode 100755 index 0000000..a044d94 Binary files /dev/null and b/dist/decodereport_darwin_arm64 differ diff --git a/dist/decodereport_linux_amd64 b/dist/decodereport_linux_amd64 new file mode 100755 index 0000000..895d801 Binary files /dev/null and b/dist/decodereport_linux_amd64 differ diff --git a/dist/decodereport_linux_amd64_static b/dist/decodereport_linux_amd64_static new file mode 100755 index 0000000..32d8f27 Binary files /dev/null and b/dist/decodereport_linux_amd64_static differ diff --git a/dist/decodereport_linux_arm64 b/dist/decodereport_linux_arm64 new file mode 100755 index 0000000..c776d1a Binary files /dev/null and b/dist/decodereport_linux_arm64 differ diff --git a/dist/decodereport_linux_arm64_static b/dist/decodereport_linux_arm64_static new file mode 100755 index 0000000..2a0d949 Binary files /dev/null and b/dist/decodereport_linux_arm64_static differ diff --git a/dist/decodereport_windows_amd64 b/dist/decodereport_windows_amd64 new file mode 100755 index 0000000..92677d1 Binary files /dev/null and b/dist/decodereport_windows_amd64 differ diff --git a/install.sh b/install.sh index 8eed836..8c041f5 100644 --- a/install.sh +++ b/install.sh @@ -1,13 +1,12 @@ #!/bin/bash INSTALL_DIR="/usr/local/bin" -BINARY_NAME="debugreport" BASE_URL="https://git.nixc.us/colin/debugreport/raw/branch/master/dist" - # Supported architectures ARCHITECTURES=("linux/amd64" "linux/arm64" "linux/arm/v7" "darwin/amd64" "darwin/arm64") +# Determine the OS and architecture OS="$(uname -s | tr '[:upper:]' '[:lower:]')" ARCH="$(uname -m)" @@ -18,17 +17,21 @@ case $ARCH in *) echo "Unsupported architecture: $ARCH"; exit 1 ;; esac -BINARY_URL="${BASE_URL}/${BINARY_NAME}_${OS}_${ARCH}" +BINARIES=("debugreport" "decodereport") -echo "Downloading and installing $BINARY_NAME from $BINARY_URL..." +for BINARY_NAME in "${BINARIES[@]}"; do + BINARY_URL="${BASE_URL}/${BINARY_NAME}_${OS}_${ARCH}" -# Check if we have write permission to the install directory -if [ -w "${INSTALL_DIR}" ]; then - curl -sSL "$BINARY_URL" -o "${INSTALL_DIR}/${BINARY_NAME}" - chmod +x "${INSTALL_DIR}/${BINARY_NAME}" -else - sudo curl -sSL "$BINARY_URL" -o "${INSTALL_DIR}/${BINARY_NAME}" - sudo chmod +x "${INSTALL_DIR}/${BINARY_NAME}" -fi + echo "Downloading and installing $BINARY_NAME from $BINARY_URL..." -echo "Installed $BINARY_NAME to $INSTALL_DIR" + # Check if we have write permission to the install directory + if [ -w "${INSTALL_DIR}" ]; then + curl -sSL "$BINARY_URL" -o "${INSTALL_DIR}/${BINARY_NAME}" + chmod +x "${INSTALL_DIR}/${BINARY_NAME}" + else + sudo curl -sSL "$BINARY_URL" -o "${INSTALL_DIR}/${BINARY_NAME}" + sudo chmod +x "${INSTALL_DIR}/${BINARY_NAME}" + fi + + echo "Installed $BINARY_NAME to $INSTALL_DIR" +done