Compare commits

...
Sign in to create a new pull request.

25 commits

Author SHA1 Message Date
e664a75256
Install ripgrep
All checks were successful
/ Test on 28.2 (push) Successful in 3m35s
/ Test on 29.4 (push) Successful in 3m54s
/ Test on snapshot (push) Successful in 6m38s
2024-09-02 12:58:24 +03:00
4561b9dde2
Install ripgrep
Some checks failed
/ Test on 28.2 (push) Failing after 21s
/ Test on 29.4 (push) Failing after 21s
/ Test on snapshot (push) Failing after 20s
2024-09-02 12:56:54 +03:00
a2c0085cf1
Use format instead of hardcode string
Some checks failed
/ Test on 28.2 (push) Failing after 3m21s
/ Test on snapshot (push) Waiting to run
/ Test on 29.4 (push) Has been cancelled
2024-09-02 12:50:03 +03:00
c4b79b2829
Change emacs version
Some checks failed
/ Test on 28.2 (push) Failing after 3m21s
/ Test on snapshot (push) Waiting to run
/ Test on 29.4 (push) Has been cancelled
2024-09-02 12:45:18 +03:00
5ac22ced29
Remove with-simulated-input
Some checks failed
/ Test on 28.2 (push) Failing after 3m14s
/ Test on 29.1 (push) Failing after 3m22s
/ Test on snapshot (push) Failing after 6m16s
2024-08-20 08:41:16 +03:00
fdf4c9da84
Add tests for last function I use
Some checks failed
/ Test on 28.2 (push) Failing after 3m14s
/ Test on 29.1 (push) Successful in 3m34s
/ Test on snapshot (push) Failing after 6m23s
2024-08-19 20:14:27 +03:00
859d748069
It won't work
All checks were successful
/ Test on 28.2 (push) Successful in 3m25s
/ Test on 29.1 (push) Successful in 3m31s
/ Test on snapshot (push) Successful in 6m21s
2024-08-19 18:32:28 +03:00
04edfc1ec2
Test directly in docker maybe?
Some checks failed
/ Test in docker on 29 (push) Failing after 2s
/ Test on 29.1 (push) Waiting to run
/ Test on snapshot (push) Waiting to run
/ Test on 28.2 (push) Has been cancelled
2024-08-19 18:31:31 +03:00
6e04a02ccf
Indent correctly
All checks were successful
/ Test on 28.2 (push) Successful in 3m25s
/ Test on 29.1 (push) Successful in 3m30s
/ Test on snapshot (push) Successful in 6m20s
2024-08-18 19:39:16 +03:00
8aada5b29a
Use with-simulated-input for tests
All checks were successful
/ Test on 28.2 (push) Successful in 3m27s
/ Test on 29.1 (push) Successful in 3m32s
/ Test on snapshot (push) Successful in 6m19s
2024-08-18 19:02:36 +03:00
2475965b80
Install deps and run tests
All checks were successful
/ Test on 28.2 (push) Successful in 3m30s
/ Test on 29.1 (push) Successful in 3m43s
/ Test on snapshot (push) Successful in 6m35s
2024-08-15 22:27:34 +03:00
005ce6d828
Disable cache, it doesn't work anyway
All checks were successful
/ Test on 28.2 (push) Successful in 3m23s
/ Test on 29.1 (push) Successful in 3m31s
/ Test on snapshot (push) Successful in 6m34s
2024-08-15 21:42:35 +03:00
c32fedaa6a
Build step
Some checks failed
/ Test on 28.2 (push) Successful in 4m40s
/ Test on 29.1 (push) Successful in 4m52s
/ Test on snapshot (push) Has been cancelled
2024-08-15 21:32:06 +03:00
93731661a8
Cache not snapshots
All checks were successful
/ Test on 28.2 (push) Successful in 4m23s
/ Test on 29.1 (push) Successful in 4m35s
/ Test on snapshot (push) Successful in 6m29s
2024-08-15 20:31:30 +03:00
6db71f77c3
Cache nix
Some checks failed
/ Test on 29.1 (push) Waiting to run
/ Test on snapshot (push) Waiting to run
/ Test on 28.2 (push) Has been cancelled
2024-08-15 20:26:07 +03:00
d9347fcc22
Apparently they need to be with dots
Some checks failed
/ Test on 28.2 (push) Successful in 3m19s
/ Test on 29.1 (push) Successful in 3m28s
/ Test on snapshot (push) Has been cancelled
2024-08-15 20:14:14 +03:00
2549662496
Add emacs versions
Some checks failed
/ Test on 28 (push) Failing after 41s
/ Test on snapshot (push) Waiting to run
/ Test on 29 (push) Has been cancelled
2024-08-15 20:13:19 +03:00
5773b4a4dd
This?
All checks were successful
/ Test on 29.1 (push) Successful in 3m31s
2024-08-15 20:06:35 +03:00
32391f9449
Remove sudo
Some checks failed
/ Test on 29.1 (push) Failing after 24s
2024-08-15 19:58:49 +03:00
9d640a49a5
Valid?
Some checks failed
/ Test on 26.3 (push) Failing after 25s
/ Test on 27.2 (push) Failing after 22s
/ Test on 28.2 (push) Failing after 22s
/ Test on 29.1 (push) Failing after 21s
/ Test on snapshot (push) Failing after 21s
2024-08-15 19:05:33 +03:00
9137bea67b
Valid?
Some checks are pending
/ Test config on 20 (push) Has started running
2024-08-15 19:04:04 +03:00
2f44d12c4c
let's try this 2024-08-15 19:00:37 +03:00
15be90691f
Github action full name
Some checks failed
/ Test config on 20 (push) Failing after 13s
2024-08-15 18:43:51 +03:00
f96762ce06
CI more
Some checks failed
/ Test config on 20 (push) Has been cancelled
2024-08-15 18:42:41 +03:00
1a6b8836a3
Move to eask
All checks were successful
/ Test config on 20 (push) Successful in 27s
2024-08-15 18:34:46 +03:00
14 changed files with 371 additions and 34 deletions

View file

@ -0,0 +1,13 @@
name: 'Set up Emacs'
description: 'Install a specific Emacs version for use in your workflow.'
author: 'Steve Purcell'
inputs:
version:
description: 'The version of Emacs to install, e.g. "24.3", or "snapshot" for a recent development version.'
runs:
using: 'composite'
steps:
- run: ${{ github.action_path }}/install.sh
shell: bash
env:
INPUT_VERSION: ${{ inputs.version }}

42
.forgejo/install-emacs/flake.lock generated Normal file
View file

@ -0,0 +1,42 @@
{
"nodes": {
"flake-utils": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1669165918,
"narHash": "sha256-hIVruk2+0wmw/Kfzy11rG3q7ev3VTi/IKVODeHcVjFo=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "3b400a525d92e4085e46141ff48cbf89fd89739e",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixpkgs-unstable",
"type": "indirect"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

View file

@ -0,0 +1,21 @@
{
description = "Setup Emacs Action";
inputs =
{
nixpkgs.url = "nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs { inherit system; };
in
{
devShell = pkgs.mkShell {
buildInputs = with pkgs; [ pkgs.shellcheck ];
};
}
);
}

View file

@ -0,0 +1,127 @@
#!/usr/bin/env bash
set -euo pipefail
# Sudo is required by this installer
apt-get update -qq
apt-get install -y sudo
if nix_path="$(type -p nix)" ; then
echo "Aborting: Nix is already installed at ${nix_path}"
exit
fi
if [[ ($OSTYPE =~ linux) && ($INPUT_ENABLE_KVM == 'true') ]]; then
enable_kvm() {
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-install-nix-action-kvm.rules
sudo udevadm control --reload-rules && sudo udevadm trigger --name-match=kvm
}
echo '::group::Enabling KVM support'
enable_kvm && echo 'Enabled KVM' || echo 'KVM is not available'
echo '::endgroup::'
fi
# GitHub command to put the following log messages into a group which is collapsed by default
echo "::group::Installing Nix"
# Create a temporary workdir
workdir=$(mktemp -d)
trap 'rm -rf "$workdir"' EXIT
# Configure Nix
add_config() {
echo "$1" >> "$workdir/nix.conf"
}
add_config "show-trace = true"
# Set jobs to number of cores
add_config "max-jobs = auto"
if [[ $OSTYPE =~ darwin ]]; then
add_config "ssl-cert-file = /etc/ssl/cert.pem"
fi
# Allow binary caches for user
add_config "trusted-users = root ${USER:-}"
# Add a GitHub access token.
# Token-less access is subject to lower rate limits.
if [[ -n "${INPUT_GITHUB_ACCESS_TOKEN:-}" ]]; then
echo "::debug::Using the provided github_access_token for github.com"
add_config "access-tokens = github.com=$INPUT_GITHUB_ACCESS_TOKEN"
# Use the default GitHub token if available.
# Skip this step if running an Enterprise instance. The default token there does not work for github.com.
elif [[ -n "${GITHUB_TOKEN:-}" && $GITHUB_SERVER_URL == "https://github.com" ]]; then
echo "::debug::Using the default GITHUB_TOKEN for github.com"
add_config "access-tokens = github.com=$GITHUB_TOKEN"
else
echo "::debug::Continuing without a GitHub access token"
fi
# Append extra nix configuration if provided
if [[ -n "${INPUT_EXTRA_NIX_CONFIG:-}" ]]; then
add_config "$INPUT_EXTRA_NIX_CONFIG"
fi
if [[ ! $INPUT_EXTRA_NIX_CONFIG =~ "experimental-features" ]]; then
add_config "experimental-features = nix-command flakes"
fi
# Always allow substituting from the cache, even if the derivation has `allowSubstitutes = false`.
# This is a CI optimisation to avoid having to download the inputs for already-cached derivations to rebuild trivial text files.
if [[ ! $INPUT_EXTRA_NIX_CONFIG =~ "always-allow-substitutes" ]]; then
add_config "always-allow-substitutes = true"
fi
# Nix installer flags
installer_options=(
--no-channel-add
--darwin-use-unencrypted-nix-store-volume
--nix-extra-conf-file "$workdir/nix.conf"
)
# only use the nix-daemon settings if on darwin (which get ignored) or systemd is supported
if [[ (! $INPUT_INSTALL_OPTIONS =~ "--no-daemon") && ($OSTYPE =~ darwin || -e /run/systemd/system) ]]; then
installer_options+=(
--daemon
--daemon-user-count "$(python3 -c 'import multiprocessing as mp; print(mp.cpu_count() * 2)')"
)
else
# "fix" the following error when running nix*
# error: the group 'nixbld' specified in 'build-users-group' does not exist
add_config "build-users-group ="
sudo mkdir -p /etc/nix
sudo chmod 0755 /etc/nix
sudo cp "$workdir/nix.conf" /etc/nix/nix.conf
fi
if [[ -n "${INPUT_INSTALL_OPTIONS:-}" ]]; then
IFS=' ' read -r -a extra_installer_options <<< "$INPUT_INSTALL_OPTIONS"
installer_options=("${extra_installer_options[@]}" "${installer_options[@]}")
fi
echo "installer options: ${installer_options[*]}"
# There is --retry-on-errors, but only newer curl versions support that
curl_retries=5
while ! curl -sS -o "$workdir/install" -v --fail -L "${INPUT_INSTALL_URL:-https://releases.nixos.org/nix/nix-2.22.1/install}"
do
sleep 1
((curl_retries--))
if [[ $curl_retries -le 0 ]]; then
echo "curl retries failed" >&2
exit 1
fi
done
sh "$workdir/install" "${installer_options[@]}"
# Set paths
echo "/nix/var/nix/profiles/default/bin" >> "$GITHUB_PATH"
# new path for nix 2.14
echo "$HOME/.nix-profile/bin" >> "$GITHUB_PATH"
if [[ -n "${INPUT_NIX_PATH:-}" ]]; then
echo "NIX_PATH=${INPUT_NIX_PATH}" >> "$GITHUB_ENV"
fi
# Set temporary directory (if not already set) to fix https://github.com/cachix/install-nix-action/issues/197
if [[ -z "${TMPDIR:-}" ]]; then
echo "TMPDIR=${RUNNER_TEMP}" >> "$GITHUB_ENV"
fi
# Close the log message group which was opened above
echo "::endgroup::"

View file

@ -0,0 +1,21 @@
#!/usr/bin/env bash
# Users should use install-nix-action if they want to customise how Nix is installed.
set -euo pipefail
if ! type -p nix &>/dev/null ; then
env INPUT_EXTRA_NIX_CONFIG= \
INPUT_INSTALL_OPTIONS= \
INPUT_INSTALL_URL= \
INPUT_NIX_PATH="nixpkgs=channel:nixos-unstable" \
INPUT_ENABLE_KVM=true \
"$(dirname "$0")"/install-nix.sh
# Make the installed Nix immediately available here
source "$GITHUB_ENV"
while IFS= read -r dir; do PATH="$dir:$PATH"; done < "$GITHUB_PATH"
fi
echo "::group::Configuring build cache and installing Emacs"
nix profile install --accept-flake-config "github:purcell/nix-emacs-ci#emacs-${INPUT_VERSION/./-}"
echo "::endgroup::"

41
.forgejo/workflows/ci.yml Normal file
View file

@ -0,0 +1,41 @@
on: [push]
jobs:
test:
name: Test on ${{matrix.emacs-version}}
runs-on: docker
strategy:
matrix:
node: ["20"]
emacs-version: ["snapshot", "28.2", "29.4"]
steps:
- name: Checkout
uses: https://code.forgejo.org/actions/checkout@v4
- name: Setup NodeJS
uses: https://code.forgejo.org/actions/setup-node@v4
with:
node-version: ${{matrix.node}}
- name: Install ripgrep
run: apt-get update -qq && apt-get install ripgrep -y
- name: Setup emacs
uses: ./.forgejo/install-emacs
with:
version: ${{ matrix.emacs-version }}
- name: Install eask
run: npm install -g @emacs-eask/cli
- name: Install deps
run: eask install-deps --dev
- name: Run tests
run: eask test buttercup
- name: Build package to dist
run: eask package
- name: Uninstall eask
run: npm uninstall -g @emacs-eask/cli

3
.gitignore vendored
View file

@ -1,2 +1,3 @@
*.elc *.elc
/.cask/ /.eask/
/dist/

10
Cask
View file

@ -1,10 +0,0 @@
(source gnu)
(source melpa)
(package-file "counsel-projectile.el")
(files "*.el")
(development
(depends-on "counsel")
(depends-on "projectile"))

18
Eask Normal file
View file

@ -0,0 +1,18 @@
(package "counsel-projectile"
"0.4.0"
"Ivy integration for Projectile")
(website-url "https://git.icejam.ee/maciej/counsel-projectile")
(keywords "project" "convenience")
(package-file "counsel-projectile.el")
(source "gnu")
(source "melpa")
(depends-on "emacs" "26.1")
(depends-on "projectile")
(depends-on "counsel")
(development
(depends-on "buttercup"))

View file

@ -1,14 +1,13 @@
emacs ?= emacs emacs ?= emacs
CASK = ~/.cask/bin/cask EASK ?= eask
BEMACS = $(emacs) -batch -l targets/elpa.el
all: compile all: compile
cask: eask:
$(CASK) $(EASK)
compile: compile:
$(BEMACS) -l targets/compile.el $(EASK) compile
.PHONY: all compile clean cask .PHONY: all compile clean cask

View file

@ -3,10 +3,10 @@
;; Copyright (C) 2016-2021 Eric Danan ;; Copyright (C) 2016-2021 Eric Danan
;; Author: Eric Danan ;; Author: Eric Danan
;; URL: https://github.com/ericdanan/counsel-projectile ;; URL: https://git.icejam.ee/maciej/counsel-projectile
;; Keywords: project, convenience ;; Keywords: project, convenience
;; Version: 0.3.2 ;; Version: 0.4.0
;; Package-Requires: ((counsel "0.13.4") (projectile "2.5.0")) ;; Package-Requires: ((counsel "0.13.4") (projectile "2.5.0") (emacs "26.1"))
;; This file is NOT part of GNU Emacs. ;; This file is NOT part of GNU Emacs.
@ -58,7 +58,7 @@
with default value ACTION, to be used as `:action' parameter for with default value ACTION, to be used as `:action' parameter for
COMMAND's `ivy-read' call. COMMAND's `ivy-read' call.
This variable holds either a single action function, or an action ;; This variable holds either a single action function, or an action
list whose first element is the index of the default action in list whose first element is the index of the default action in
the list and the remaining elements are the actions (a key, a the list and the remaining elements are the actions (a key, a
function, and a name for each action)." function, and a name for each action)."

View file

@ -1,3 +0,0 @@
(setq files '("counsel-projectile.el"))
(setq byte-compile--use-old-handlers nil)
(mapc #'byte-compile-file files)

View file

@ -1,6 +0,0 @@
(setq package-user-dir
(expand-file-name (format ".cask/%s/elpa" emacs-version)))
(package-initialize)
(message "ELPA dir: %S" package-user-dir)
(add-to-list 'load-path default-directory)

View file

@ -0,0 +1,73 @@
;;; test-counsel-projectile.el --- Buttercup tests for counsel-projectile -*- lexical-binding: t; -*-
;;; Commentary:
;;; Code:
(require 'counsel-projectile)
(require 'buttercup)
;; Example test!
(describe "counsel-projectile-switch-project"
(before-each
(spy-on 'ivy-read)
(spy-on 'projectile-project-root :and-return-value "/usr/fake-project")
(setq
projectile-known-projects '("/usr/fake-project" "~/some-project")
counsel-projectile-switch-project-action 'counsel-projectile-switch-project-action))
(it "calls ivy-read"
(counsel-projectile-switch-project)
(expect 'projectile-project-root :to-have-been-called)
(expect
'ivy-read
:to-have-been-called-with
"[fake-project] Switch to project: "
'("/usr/fake-project" "~/some-project")
:preselect "/usr/fake-project"
:action 'counsel-projectile-switch-project-action
:require-match t
:sort nil
:caller 'counsel-projectile-switch-project)))
(describe "counsel-projectile-rg"
(before-each
(spy-on 'ivy-read)
(spy-on 'projectile-project-root :and-return-value "/usr/fake-project"))
(it "calls ivy-read"
(counsel-projectile-rg)
(expect
'ivy-read
:to-have-been-called-with
"[fake-project] rg: "
'counsel-ag-function
:initial-input nil
:dynamic-collection t
:keymap '(keymap
(24 keymap (4 . counsel-cd))
(67108903 . swiper-avy)
(27 keymap (113 . counsel-git-grep-query-replace))
(12 . ivy-call-and-recenter))
:history 'counsel-git-grep-history
:action 'counsel-git-grep-action
:require-match t
:caller 'counsel-rg)))
(describe "counsel-projectile-find-file"
(before-each
(spy-on 'ivy-read)
(spy-on 'projectile-project-root :and-return-value user-emacs-directory))
(it "calls ivy-read"
(counsel-projectile-find-file)
(expect
'ivy-read
:to-have-been-called-with (format "[%s] Find file: " emacs-version)
nil
:matcher 'counsel-projectile--find-file-matcher
:require-match t
:sort nil
:action counsel-projectile-find-file-action
:caller 'counsel-projectile-find-file)))
;; Local Variables:
;; no-byte-compile: t
;; End:
;;; test-counsel-projectile.el ends here