diff --git a/.gitignore b/.gitignore index 42de706..3084866 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ dist/ # Useless stuffs .DS_Store +# Added by goreleaser init: +.intentionally-empty-file.o diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 0000000..8bba294 --- /dev/null +++ b/.goreleaser.yaml @@ -0,0 +1,49 @@ +# yaml-language-server: $schema=https://goreleaser.com/static/schema.json +# vim: set ts=2 sw=2 tw=0 fo=cnqoj + +version: 2 +pro: true + +before: + hooks: + - rustup default stable + - cargo install --locked cargo-zigbuild + - cargo fetch --locked + +builds: + - builder: rust + flags: + - --release + - --package=coop + targets: + - x86_64-unknown-linux-gnu + - x86_64-apple-darwin + - x86_64-pc-windows-gnu + - aarch64-unknown-linux-gnu + - aarch64-apple-darwin + +archives: + - formats: [tar.gz] + name_template: >- + {{ .ProjectName }}_ + {{- title .Os }}_ + {{- if eq .Arch "amd64" }}x86_64 + {{- else if eq .Arch "386" }}i386 + {{- else }}{{ .Arch }}{{ end }} + format_overrides: + - goos: windows + formats: [zip] + +changelog: + sort: asc + filters: + exclude: + - "^docs:" + - "^test:" + +release: + footer: >- + + --- + + Released by [GoReleaser](https://github.com/goreleaser/goreleaser). diff --git a/Cargo.lock b/Cargo.lock index a2ac5c3..63fba34 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -397,7 +397,7 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "auto_update" -version = "0.1.5" +version = "1.0.0" dependencies = [ "anyhow", "common", @@ -920,7 +920,7 @@ dependencies = [ [[package]] name = "chats" -version = "0.1.5" +version = "1.0.0" dependencies = [ "anyhow", "chrono", @@ -977,7 +977,7 @@ dependencies = [ [[package]] name = "client_keys" -version = "0.1.5" +version = "1.0.0" dependencies = [ "anyhow", "global", @@ -1114,7 +1114,7 @@ dependencies = [ [[package]] name = "common" -version = "0.1.5" +version = "1.0.0" dependencies = [ "anyhow", "chrono", @@ -1167,7 +1167,7 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "coop" -version = "0.1.5" +version = "1.0.0" dependencies = [ "anyhow", "auto_update", @@ -2243,7 +2243,7 @@ checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "global" -version = "0.1.5" +version = "1.0.0" dependencies = [ "anyhow", "dirs 5.0.1", @@ -2909,7 +2909,7 @@ dependencies = [ [[package]] name = "identity" -version = "0.1.5" +version = "1.0.0" dependencies = [ "anyhow", "client_keys", @@ -5516,7 +5516,7 @@ dependencies = [ [[package]] name = "settings" -version = "0.1.5" +version = "1.0.0" dependencies = [ "anyhow", "global", @@ -6059,7 +6059,7 @@ dependencies = [ [[package]] name = "theme" -version = "0.1.5" +version = "1.0.0" dependencies = [ "anyhow", "gpui", @@ -6488,7 +6488,7 @@ dependencies = [ [[package]] name = "ui" -version = "0.1.5" +version = "1.0.0" dependencies = [ "anyhow", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 15493cb..5c99453 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ members = ["crates/*"] default-members = ["crates/coop"] [workspace.package] -version = "0.1.5" +version = "1.0.0" edition = "2021" publish = false diff --git a/script/freebsd b/script/freebsd new file mode 100644 index 0000000..5e1cbd8 --- /dev/null +++ b/script/freebsd @@ -0,0 +1,240 @@ +#!/usr/bin/env bash + +set -xeuo pipefail + +# if root or if sudo/unavailable, define an empty variable +if [ "$(id -u)" -eq 0 ] +then maysudo='' +else maysudo="$(command -v sudo || command -v doas || true)" +fi + +function finalize { + # after packages install (curl, etc), get the rust toolchain + which rustup > /dev/null 2>&1 || curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y + # verify the mold situation + if ! command -v mold >/dev/null 2>&1; then + echo "Warning: Mold binaries are unavailable on your system." >&2 + echo " Builds will be slower without mold. Try: script/install-mold" >&2 + fi + echo "Finished installing Linux dependencies with script/linux" +} + +# Ubuntu, Debian, Mint, Kali, Pop!_OS, Raspbian, etc. +apt=$(command -v apt-get || true) +if [[ -n $apt ]]; then + deps=( + gcc + g++ + libasound2-dev + libfontconfig-dev + libwayland-dev + libx11-xcb-dev + libxkbcommon-x11-dev + libssl-dev + libzstd-dev + libvulkan1 + libgit2-dev + make + cmake + clang + jq + git + curl + gettext-base + elfutils + libsqlite3-dev + musl-tools + musl-dev + build-essential + ) + if (grep -qP 'PRETTY_NAME="(Linux Mint 22|.+24\.(04|10))' /etc/os-release); then + deps+=( mold libstdc++-14-dev ) + elif (grep -qP 'PRETTY_NAME="((Debian|Raspbian).+12|Linux Mint 21|.+22\.04)' /etc/os-release); then + deps+=( mold libstdc++-12-dev ) + elif (grep -qP 'PRETTY_NAME="((Debian|Raspbian).+11|Linux Mint 20|.+20\.04)' /etc/os-release); then + deps+=( libstdc++-10-dev ) + fi + + $maysudo "$apt" update + $maysudo "$apt" install -y "${deps[@]}" + finalize + exit 0 +fi + +# Fedora, CentOS, RHEL, Alma, Amazon 2023, Oracle, etc. +dnf=$(command -v dnf || true) +# Old Redhat (yum only): Amazon Linux 2, Oracle Linux 7, etc. +yum=$(command -v yum || true) + +if [[ -n $dnf ]] || [[ -n $yum ]]; then + pkg_cmd="${dnf:-${yum}}" + deps=( + musl-gcc + gcc + clang + cmake + alsa-lib-devel + fontconfig-devel + wayland-devel + libxcb-devel + libxkbcommon-x11-devel + openssl-devel + libzstd-devel + vulkan-loader + sqlite-devel + jq + git + tar + ) + # perl used for building openssl-sys crate. See: https://docs.rs/openssl/latest/openssl/ + if grep -qP '^ID="?(fedora)' /etc/os-release; then + deps+=( + perl-FindBin + perl-IPC-Cmd + perl-File-Compare + perl-File-Copy + mold + ) + elif grep -qP '^ID="?(rhel|rocky|alma|centos|ol)' /etc/os-release; then + deps+=( perl-interpreter ) + fi + + # gcc-c++ is g++ on RHEL8 and 8.x clones + if grep -qP '^ID="?(rhel|rocky|alma|centos|ol)' /etc/os-release \ + && grep -qP '^VERSION_ID="?(8)' /etc/os-release; then + deps+=( gcc-c++ ) + else + deps+=( g++ ) + fi + + # libxkbcommon-x11-devel is in a non-default repo on RHEL 8.x/9.x (except on AmazonLinux) + if grep -qP '^VERSION_ID="?(8|9)' /etc/os-release && grep -qP '^ID="?(rhel|rocky|centos|alma|ol)' /etc/os-release; then + $maysudo dnf install -y 'dnf-command(config-manager)' + if grep -qP '^PRETTY_NAME="(AlmaLinux 8|Rocky Linux 8)' /etc/os-release; then + $maysudo dnf config-manager --set-enabled powertools + elif grep -qP '^PRETTY_NAME="((AlmaLinux|Rocky|CentOS Stream) 9|Red Hat.+(8|9))' /etc/os-release; then + $maysudo dnf config-manager --set-enabled crb + elif grep -qP '^PRETTY_NAME="Oracle Linux Server 8' /etc/os-release; then + $maysudo dnf config-manager --set-enabled ol8_codeready_builder + elif grep -qP '^PRETTY_NAME="Oracle Linux Server 9' /etc/os-release; then + $maysudo dnf config-manager --set-enabled ol9_codeready_builder + else + echo "Unexpected distro" && grep 'PRETTY_NAME' /etc/os-release && exit 1 + fi + fi + + $maysudo "$pkg_cmd" install -y "${deps[@]}" + finalize + exit 0 +fi + +# openSUSE +# https://software.opensuse.org/ +zyp=$(command -v zypper || true) +if [[ -n $zyp ]]; then + deps=( + alsa-devel + clang + cmake + fontconfig-devel + gcc + gcc-c++ + git + gzip + jq + libvulkan1 + libxcb-devel + libxkbcommon-devel + libxkbcommon-x11-devel + libzstd-devel + make + mold + openssl-devel + sqlite3-devel + tar + wayland-devel + xcb-util-devel + ) + $maysudo "$zyp" install -y "${deps[@]}" + finalize + exit 0 +fi + +# Arch, Manjaro, etc. +# https://archlinux.org/packages +pacman=$(command -v pacman || true) +if [[ -n $pacman ]]; then + deps=( + gcc + clang + musl + cmake + alsa-lib + fontconfig + wayland + libgit2 + libxcb + libxkbcommon-x11 + openssl + zstd + pkgconf + mold + sqlite + jq + git + ) + $maysudo "$pacman" -Syu --needed --noconfirm "${deps[@]}" + finalize + exit 0 +fi + +# Void +# https://voidlinux.org/packages/ +xbps=$(command -v xbps-install || true) +if [[ -n $xbps ]]; then + deps=( + gettext-devel + clang + cmake + jq + elfutils-devel + gcc + alsa-lib-devel + fontconfig-devel + libxcb-devel + libxkbcommon-devel + libzstd-devel + openssl-devel + wayland-devel + vulkan-loader + mold + ) + $maysudo "$xbps" -Syu "${deps[@]}" + finalize + exit 0 +fi + +# Gentoo +# https://packages.gentoo.org/ +emerge=$(command -v emerge || true) +if [[ -n $emerge ]]; then + deps=( + app-arch/zstd + app-misc/jq + dev-libs/openssl + dev-libs/wayland + dev-util/cmake + media-libs/alsa-lib + media-libs/fontconfig + media-libs/vulkan-loader + x11-libs/libxcb + x11-libs/libxkbcommon + sys-devel/mold + ) + $maysudo "$emerge" -u "${deps[@]}" + finalize + exit 0 +fi + +echo "Unsupported Linux distribution in script/linux" +exit 1 diff --git a/script/linux b/script/linux new file mode 100644 index 0000000..215dd8b --- /dev/null +++ b/script/linux @@ -0,0 +1,236 @@ +#!/usr/bin/env bash + +set -xeuo pipefail + +# if root or if sudo/unavailable, define an empty variable +if [ "$(id -u)" -eq 0 ] +then maysudo='' +else maysudo="$(command -v sudo || command -v doas || true)" +fi + +function finalize { + # after packages install (curl, etc), get the rust toolchain + which rustup > /dev/null 2>&1 || curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y + # verify the mold situation + if ! command -v mold >/dev/null 2>&1; then + echo "Warning: Mold binaries are unavailable on your system." >&2 + echo " Builds will be slower without mold. Try: script/install-mold" >&2 + fi + echo "Finished installing Linux dependencies with script/linux" +} + +# Ubuntu, Debian, Mint, Kali, Pop!_OS, Raspbian, etc. +apt=$(command -v apt-get || true) +if [[ -n $apt ]]; then + deps=( + gcc + g++ + libasound2-dev + libfontconfig-dev + libwayland-dev + libx11-xcb-dev + libxkbcommon-x11-dev + libssl-dev + libzstd-dev + libvulkan1 + libgit2-dev + make + cmake + clang + jq + git + curl + gettext-base + elfutils + musl-tools + musl-dev + build-essential + ) + if (grep -qP 'PRETTY_NAME="(Linux Mint 22|.+24\.(04|10))' /etc/os-release); then + deps+=( mold libstdc++-14-dev ) + elif (grep -qP 'PRETTY_NAME="((Debian|Raspbian).+12|Linux Mint 21|.+22\.04)' /etc/os-release); then + deps+=( mold libstdc++-12-dev ) + elif (grep -qP 'PRETTY_NAME="((Debian|Raspbian).+11|Linux Mint 20|.+20\.04)' /etc/os-release); then + deps+=( libstdc++-10-dev ) + fi + + $maysudo "$apt" update + $maysudo "$apt" install -y "${deps[@]}" + finalize + exit 0 +fi + +# Fedora, CentOS, RHEL, Alma, Amazon 2023, Oracle, etc. +dnf=$(command -v dnf || true) +# Old Redhat (yum only): Amazon Linux 2, Oracle Linux 7, etc. +yum=$(command -v yum || true) + +if [[ -n $dnf ]] || [[ -n $yum ]]; then + pkg_cmd="${dnf:-${yum}}" + deps=( + musl-gcc + gcc + clang + cmake + alsa-lib-devel + fontconfig-devel + wayland-devel + libxcb-devel + libxkbcommon-x11-devel + openssl-devel + libzstd-devel + vulkan-loader + jq + git + tar + ) + # perl used for building openssl-sys crate. See: https://docs.rs/openssl/latest/openssl/ + if grep -qP '^ID="?(fedora)' /etc/os-release; then + deps+=( + perl-FindBin + perl-IPC-Cmd + perl-File-Compare + perl-File-Copy + mold + ) + elif grep -qP '^ID="?(rhel|rocky|alma|centos|ol)' /etc/os-release; then + deps+=( perl-interpreter ) + fi + + # gcc-c++ is g++ on RHEL8 and 8.x clones + if grep -qP '^ID="?(rhel|rocky|alma|centos|ol)' /etc/os-release \ + && grep -qP '^VERSION_ID="?(8)' /etc/os-release; then + deps+=( gcc-c++ ) + else + deps+=( g++ ) + fi + + # libxkbcommon-x11-devel is in a non-default repo on RHEL 8.x/9.x (except on AmazonLinux) + if grep -qP '^VERSION_ID="?(8|9)' /etc/os-release && grep -qP '^ID="?(rhel|rocky|centos|alma|ol)' /etc/os-release; then + $maysudo dnf install -y 'dnf-command(config-manager)' + if grep -qP '^PRETTY_NAME="(AlmaLinux 8|Rocky Linux 8)' /etc/os-release; then + $maysudo dnf config-manager --set-enabled powertools + elif grep -qP '^PRETTY_NAME="((AlmaLinux|Rocky|CentOS Stream) 9|Red Hat.+(8|9))' /etc/os-release; then + $maysudo dnf config-manager --set-enabled crb + elif grep -qP '^PRETTY_NAME="Oracle Linux Server 8' /etc/os-release; then + $maysudo dnf config-manager --set-enabled ol8_codeready_builder + elif grep -qP '^PRETTY_NAME="Oracle Linux Server 9' /etc/os-release; then + $maysudo dnf config-manager --set-enabled ol9_codeready_builder + else + echo "Unexpected distro" && grep 'PRETTY_NAME' /etc/os-release && exit 1 + fi + fi + + $maysudo "$pkg_cmd" install -y "${deps[@]}" + finalize + exit 0 +fi + +# openSUSE +# https://software.opensuse.org/ +zyp=$(command -v zypper || true) +if [[ -n $zyp ]]; then + deps=( + alsa-devel + clang + cmake + fontconfig-devel + gcc + gcc-c++ + git + gzip + jq + libvulkan1 + libxcb-devel + libxkbcommon-devel + libxkbcommon-x11-devel + libzstd-devel + make + mold + openssl-devel + tar + wayland-devel + xcb-util-devel + ) + $maysudo "$zyp" install -y "${deps[@]}" + finalize + exit 0 +fi + +# Arch, Manjaro, etc. +# https://archlinux.org/packages +pacman=$(command -v pacman || true) +if [[ -n $pacman ]]; then + deps=( + gcc + clang + musl + cmake + alsa-lib + fontconfig + wayland + libgit2 + libxcb + libxkbcommon-x11 + openssl + zstd + pkgconf + mold + jq + git + ) + $maysudo "$pacman" -Syu --needed --noconfirm "${deps[@]}" + finalize + exit 0 +fi + +# Void +# https://voidlinux.org/packages/ +xbps=$(command -v xbps-install || true) +if [[ -n $xbps ]]; then + deps=( + gettext-devel + clang + cmake + jq + elfutils-devel + gcc + alsa-lib-devel + fontconfig-devel + libxcb-devel + libxkbcommon-devel + libzstd-devel + openssl-devel + wayland-devel + vulkan-loader + mold + ) + $maysudo "$xbps" -Syu "${deps[@]}" + finalize + exit 0 +fi + +# Gentoo +# https://packages.gentoo.org/ +emerge=$(command -v emerge || true) +if [[ -n $emerge ]]; then + deps=( + app-arch/zstd + app-misc/jq + dev-libs/openssl + dev-libs/wayland + dev-util/cmake + media-libs/alsa-lib + media-libs/fontconfig + media-libs/vulkan-loader + x11-libs/libxcb + x11-libs/libxkbcommon + sys-devel/mold + ) + $maysudo "$emerge" -u "${deps[@]}" + finalize + exit 0 +fi + +echo "Unsupported Linux distribution in script/linux" +exit 1